超载ostream& operator<<:如何强制输出零?

时间:2012-02-12 17:10:53

标签: c++ formatting iostream

我想重载

ostream& operator<<(ostream& out, const myType& y)

以my unsigned short向量输出myType中表示的大的无符号整数。因此,如果有问题的向量具有元素1f, a356, 13d5,我想获得输出1fa35613d5 - 现在我只需要hexoct输出。 特别是,1, 0, 0应输出到100000000。我想通过连续输出向量的元素来实现这一点。然而,我使用此方法得到的是100,尽管我设置了

out.width(4);
out.fill('0');
out << std::internal;
out << std::noskipws;

当然我可以先将ushort写入字符串然后输出,但我更喜欢只使用out的格式说明,因为这样可以更容易地尊重{ {1}}或hex oct设置out。我在这里找不到哪种格式化选项?

1 个答案:

答案 0 :(得分:2)

以下程序打印固定宽度的十六进制字符:

#include <iostream>
#include <iomanip>
#include <vector>

int main()
{
    std::vector<unsigned short int> v { 10, 25, 0, 2000 };

    for (auto n : v)
    {
        std::cout << "0x" << std::hex << std::setfill('0')
                  << std::setw(4) << n << std::endl;
    }
}

输出:

0x000a
0x0019
0x0000
0x07d0

如果您正在为此编写格式化功能,则不必重复std::hex,因为这是永久性的。但是,保留ostream的状态有点棘手,所以也许你应该研究一下Boost的状态保护程序。