我有 char [] ,带有缓冲区名称,使用ifstream以二进制模式保存数据,
void File::mostrarBuffer(){
for (int a = 0; a < std::strlen(buffer); a++){
std::cout << std::hex << ((int)buffer[a]) << std::endl;
}
// para ver char test, only for test
std::cout << "===" << std::endl;
for (int a = 0; a < std::strlen(buffer); a++){
std::cout << buffer[a] << std::endl;
}
char charTest = '\211';
std::cout << "===" << std::endl;
std::cout << std::hex << (int)charTest << std::endl;
std::cout << std::hex << (int)buffer[0] << std::endl;
}
shell出来了:
ffffff89
50
4e
47
===
\211
P
N
G
===
ffffff89
ffffff89
hexdump中的文件(“little-endian”):
0000000 5089 474e 0a0d 0a1a 0000 0d00 4849 5244
我的问题是为什么,出现ffffff89而不是89,并且只在char []的第一个元素上我已经使用了这个并且找不到解决方案。谢谢你的阅读。
这个解决方案对我有用:
std::cout << std::hex << ((unsigned int)(unsigned char)buffer[a])
<< std::endl;
答案 0 :(得分:2)
因为您的char
已签名(设置了最高位)。
对不起,我对使用std::hex
并不熟悉,但你需要将它视为无符号字符值。尝试将char
转换为无符号类型。