c++ - std::copy raw data to cout in hex format using ostream_iterator<uint8_t> 打印出未格式化的数据。为什么?

标签 c++ iterator iostream

想法是有一个包含任意二进制数据的 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/

相关文章:

c++ - istream 末尾的字符问题

c++ - IMFSourceReaderCallback : base class undefined

c++ - 为什么我需要在 QVector<MyClass> 中有一个默认构造函数?

php - PHP中的RecursiveDirectoryIterator,在foreach中获取每个目录两次

c++ - 迭代器和重载 << 运算符

c++ - 如何更改默认语言环境的千位分隔符?

c++ - 如何编译以目录结构组织的 C++ 文件?

c++ - 用c++释放内存的最好方法是什么

c# - 迭代器何时应该返回 IEnumerator 而不是 IEnumerable?

c++ - `seekg()` 和 `seekp()` 是对字符还是字节进行操作?