我具有与十六进制数据一个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'并相应地解释二进制数据。它是*未定义的行为*。 –