在C++中打印出无符号字符数组的十六进制谷

Printing out the hex vale of an unsigned char array in C++

本文关键字:数组 十六进制 字符 无符号 C++ 打印      更新时间:2023-10-16

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

最明显的方法是如下所示。

unsigned char str[] = "foo bar bazn";
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

如何coutstr的正确hex值?

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

unsigned char str[] = "foo bar bazn";
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

这与str中每个unsigned charhex值相对应。


可以在以下std::hex文档中找到对此的解释。

标准::十六进制

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

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

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