铸造长到无符号短Int / Strtol

时间:2018-04-01 17:40:31

标签: c long-integer short unsigned-integer strtol

没有编译错误。但是,结果不是预期的。我怀疑是铸造long to unsigned short int导致错误。我怎样才能安全地长期使用Hex? [Requiriments:将一行字符串(有数字)转换为unsigned short int]谢谢!

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;
}  

1 个答案:

答案 0 :(得分:1)

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

如果你期待二进制文件,你需要告诉strtol期望:

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