从命令行读取十六进制到unsigned char和unsigned short

时间:2016-09-07 18:50:47

标签: c

int main(int argc, char *argv[]){
    unsigned char Data = 0xff;
    unsigned short addr = 0xff;

    sscanf(argv[1], "%u", &Data);
    sscanf(argv[2], "%hu", &addr);

    printf("data is %u addr is %hu ", Data, addr);

    return 0;
}

嗨,我正在尝试将十六进制格式的命令行参数读入unsigned char和unsigned short。请检查上面的代码段。输出始终为0xff(初始化值)。我可以知道需要改变哪些来阅读输入?

2 个答案:

答案 0 :(得分:2)

通过使用%u说明符,您告诉sscanf您想要以十进制格式(基数为10)读取an unsigned int。如果需要十六进制输入(基数为16),则必须使用%x说明符。此外,您需要指定正确的整数大小。对于unsigned char,您需要hh作为长度修饰符。使用错误的长度修饰符是导致未定义行为的原因。

所以你应该试试%hhx说明符。类似的东西:

#include <stdio.h>

int main(void){
    unsigned char Data = 0xff;

    char argv1[20] = "0x40";

    sscanf(argv1, "0x%hhx", &Data);

    printf("data is %u\n", Data);

    return 0;

}
  

输出:数据为64

对于十六进制的unsigned short,您应该使用%hx

答案 1 :(得分:1)

C99及更高版本的unsigned char指定者为%hhx