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(初始化值)。我可以知道需要改变哪些来阅读输入?
答案 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