在运算符<<中以十六进制打印0

时间:2018-09-13 08:38:04

标签: c++

这是我用来以十六进制格式打印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

0 个答案:

没有答案