想法是有一个包含任意二进制数据的 vector ,并将它包含的字节以十六进制表示法输出到标准输出。我使用 std::copy 将字节从输入 vector 复制到标准输出。问题是代码打印出 0 后跟原始二进制数据。这是代码:
auto vec = std::vector<uint8_t> {'h', 'e', 'l', 'l', 'o'};
std::cout << std::hex << std::setfill('0') << std::setw(2);
std::copy(vec.begin(), vec.end(), std::ostream_iterator<uint8_t>(std::cout));
应用程序打印出“0hello”。我希望它打印出“68656C6C6F”。会是什么情况?
最佳答案
简单的改变,使用int
而不是 uint8_t
:
std::copy(vec.begin(), vec.end(), std::ostream_iterator<int>(std::cout));
如果需要大写,请使用 std::uppercase
.
operator<<
有non-member overloads对于 char
, signed char
, 和 unsigned char
.请参阅:uint8_t iostream behavior .
关于c++ - std::copy raw data to cout in hex format using ostream_iterator<uint8_t> 打印出未格式化的数据。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26430456/