这是我用来以十六进制格式打印uint8_t
矢量内容的代码示例。
#include <iostream>
#include <iomanip>
#include <cstdint>
#include <vector>
std::ostream& operator<<(std::ostream& o, const std::vector<uint8_t>& packet) {
std::ios_base::fmtflags oldFlags = o.flags();
std::streamsize oldPrec = o.precision();
char oldFill = o.fill();
o << std::showbase // show the 0x prefix
<< std::internal // fill between the prefix and the number
<< std::setfill('0'); // fill with 0s
for (std::size_t i = 0; i < packet.size(); ++i) {
o << std::setw(4) << std::hex << (int) packet[i] << " ";
}
o.flags(oldFlags);
o.precision(oldPrec);
o.fill(oldFill);
return o;
}
int main() {
std::vector<uint8_t> packet{0x81, 0x55, 0x00};
std::cout << packet << "\n";
}
这将打印以下内容:
0x81 0x55 0000
我希望最后一个0000
显示为0x00
。我该如何实现?
PS:我查看了有关打印0x00
的几个问题,但这些问题的答案也为我打印了0000
。