std ::使用ostream_iterator <uint8_t>以十六进制格式将原始数据复制到cout,打印出未格式化的数据.为什么?

alv*_*rez 3 c++ iterator iostream

我们的想法是让一个包含任意二进制数据的向量,并以十六进制表示法将它包含的字节输出到stdout.我使用std :: copy将输入向量中的字节复制到stdout.问题是代码打印出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));
Run Code Online (Sandbox Code Playgroud)

该应用程序打印出"0hello".我希望它打印出"68656C6C6F".可能是这样的?

小智 9

简单的改变,使用int而不是uint8_t:

std::copy(vec.begin(), vec.end(), std::ostream_iterator<int>(std::cout));
Run Code Online (Sandbox Code Playgroud)

如果你想要它是大写的,请使用std::uppercase.

operator<<具有非成员重载char,signed char,和unsigned char.请参阅:uint8_t iostream行为.