使用%x打印十六进制值时,为什么在每个值后打印'ffffff'?

Sye*_*sma 7 c++

在示例c ++代码中,我将打开一个文件并打印六进制文件中的每个字符只有16个字符,但为什么ffffff会在每个heax值后打印?

char buff[256];
// buff filled with fread
for(i=0;i<16;i++)
printf("%x",buff[i]);
Run Code Online (Sandbox Code Playgroud)

输出是:

4affffff67ffffffcdffffff
Run Code Online (Sandbox Code Playgroud)

为什么是这样?

Ale*_*x F 12

编辑:

 printf("%x",  (int)(*(unsigned char*)(&buff[i])) );

这应该成功.我的第一个版本不对,抱歉.问题在于符号位:超过127的每个值都被处理为负数.转换为unsigned char应该可以解决问题.

  • 外部强制转换应该是`unsigned int`,而不是`int`. (2认同)