在示例c ++代码中,我将打开一个文件并以hexa打印每个char 文件只有16个字符,但为什么ffffff会在每个heax值后打印?
char buff[256];
// buff filled with fread
for(i=0;i<16;i++)
printf("%x",buff[i]);
输出是:
4affffff67ffffffcdffffff
为什么会这样?
答案 0 :(得分:12)
编辑:
printf("%x", (int)(*(unsigned char*)(&buff[i])) );
这应该成功。我的第一个版本不对,抱歉。问题在于符号位:每个超过127的值都被视为负数。转换为unsigned char应该可以解决问题。
答案 1 :(得分:0)
printf("%x", (unsigned int)(unsigned char)buff[i]);
说明:
printf
将首先将char转换为int。如果您的字符已签名(第一位为1) - 例如10000001
- 然后签名扩展名将在转换为int:11111111 11111111 11111111 10000001
时保留该值。修复是首先自己转换它(没有符号扩展名)。