将 Long 转换为 Unsigned Short Int / Strtol

Posted

技术标签:

【中文标题】将 Long 转换为 Unsigned Short Int / Strtol【英文标题】:Casting Long to Unsigned Short Int / Strtol 【发布时间】:2018-04-01 17:40:31 【问题描述】:

没有编译错误。然而,结果并不出人意料。我怀疑将 long 转换为 unsigned short int 会导致错误。我如何安全地将 Hex 的多头转换为空头? [要求:将一行字符串(有数字)转换为无符号短整数] 谢谢!

unsigned short int str_to_bin (char* instr_bin_str) 
    unsigned short int i = 0;
    long j;
    char* ptr;

    j = strtol (instr_bin_str, &ptr, 10);

    if (j == 0) 
        fprintf (stderr, "error6: str_to_bin() failed");
        return 6;
    

    i = (unsigned short) j;
    printf("State: 0x%X \n", i);

    return i;
  

【问题讨论】:

你的输入、预期输出和实际输出是多少? 请注意,如果您不打算使用ptr,则可以将NULL 传递给strtol 如果给定的字符串是:0001001000000001,那么输出应该是 0x1201(通过 printf)。但是,我得到 0xDA01。 如果输入字符串是二进制的,那么10 是不正确的。 你的字面意思是strtol (instr_bin_str, &ptr, 10),其中10 的意思是“base-10”或十进制,并期望它将输入视为二进制...跨度> 【参考方案1】:

您传入的字符串是数字的二进制表示。但是,当您调用 strtol 时,您为第三个参数传入 10,这意味着它需要一个十进制表示形式的字符串。

如果您期待二进制,您需要告诉strtol 期待:

j = strtol (instr_bin_str, &ptr, 2);

【讨论】:

以上是关于将 Long 转换为 Unsigned Short Int / Strtol的主要内容,如果未能解决你的问题,请参考以下文章

c语言中如何将short,int,long,float这些类型的数值转换为字符串?

将 unsigned short * 转换为 unsigned int *

如何将 unsigned long long int 转换为 unsigned char*?

将 unsigned char 音频转换为 short

如何将 unsigned char* 转换为 unsigned long long int?

JAVA int类型转short类型