我在字符串中定义了 C 语言的十六进制数字:
char chars[] = "\xfb\x54\x9c\xb2\x10\xef\x89\x51\x2f\x0b\xea\xbb\x1d\xaf\xad\xf8";
然后我想将这些值与另一个值进行比较。它不起作用,如果我打印如下值:
printf("%02x\n", chars[0]);
它写入 fffffffb
。为什么会这样以及如何准确获取 fb
值?
最佳答案
这是因为符号扩展。
改变
printf("%02x\n", chars[0]);
到
printf("%02x\n", (unsigned char)chars[0]);
%x
格式说明符将在 32 位机器上读取 4 个字节
。由于您已将 chars
声明为字符数组,因此在获取值时 fb
(负值)将被符号扩展为 fffffffb
,其中 MSB fb
设置为它之前的所有其他位。
更多详细信息请参阅此 sign extension
如果您将 char chars[]
声明为 unsigned char chars[]
,那么打印将如预期的那样。
关于c - 打印存储为字符串的十六进制值会产生意外输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31852958/