在C ++中打印出unsigned char数组的十六进制值

时间:2015-05-12 15:06:33

标签: c++ string hex std cout

我想使用hex函数打印出unsigned char数组的cout值。

最明显的方法如下:

unsigned char str[] = "foo bar baz\n";

for(unsigned short int i = 0; i < sizeof(str); i++){
  std::cout << std::hex << str[i] << std::dec << ' ';
}

std::cout << std::endl;

令人惊讶的是,这会输出以下字符串:

foo bar baz

由于某种原因,这不会打印出str

的正确十六进制值

我如何cout hex的正确str值?

1 个答案:

答案 0 :(得分:3)

cout无符号字符的正确十六进制值,首先需要将其转换为整数。

unsigned char str[] = "foo bar baz\n";

for(unsigned short int i = 0; i < sizeof(str); i++){
  std::cout << std::hex << (int) str[i] << std::dec << ' ';
}

std::cout << std::endl;

提供以下输出。

66 6f 6f 20 62 61 72 20 62 61 7a 00

hex中每个unsigned char的{​​{1}}值相对应。

可以在以下str文档中找到对此的解释。

  

的std ::己

     

将str流的std::hex格式标志设置为basefield

     

hex设置为basefield时,插入流中的整数值以十六进制数表示(即基数16)。对于输入流,当设置此标志时,预期提取的值也将以十六进制数表示。

http://www.cplusplus.com/reference/ios/hex/