char,hex,因为它显示了ffffff

时间:2015-03-24 17:03:40

标签: c++

我有 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;

1 个答案:

答案 0 :(得分:2)

因为您的char已签名(设置了最高位)。

对不起,我对使用std::hex并不熟悉,但你需要将它视为无符号字符值。尝试将char转换为无符号类型。