【发布时间】:2017-09-10 20:16:48
【问题描述】:
我在 C 程序中有我想要迭代的十六进制数据的代码,例如打印出每个十六进制字节:
char input[] = "\x31\xd2\xb2\x30";
for (int i = 0; i < strlen(input); i++) {
printf("%02X\n", input[i]);
}
但是,输出不是我所期望的,例如上面的打印:
31
FFFFFFD2
FFFFFFB2
30
我还尝试将输出转换为 (unsigned int),但我收到了相同的输出。
有人能指出这个简单脚本的问题吗?
【问题讨论】:
-
在您的系统上,
char可能是signed。所以数据\xd2是负数。您将该值传递给printf,它会被提升为int,它也已签名。但是格式说明符%X需要unsigned int并相应地解释二进制数据。这是未定义的行为。