我想重载
ostream& operator<<(ostream& out, const myType& y)
以my unsigned short
向量输出myType中表示的大的无符号整数。因此,如果有问题的向量具有元素1f, a356, 13d5
,我想获得输出1fa35613d5
- 现在我只需要hex
或oct
输出。
特别是,1, 0, 0
应输出到100000000
。我想通过连续输出向量的元素来实现这一点。然而,我使用此方法得到的是100
,尽管我设置了
out.width(4);
out.fill('0');
out << std::internal;
out << std::noskipws;
当然我可以先将ushort
写入字符串然后输出,但我更喜欢只使用out
的格式说明,因为这样可以更容易地尊重{ {1}}或hex
oct
设置out
。我在这里找不到哪种格式化选项?
答案 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的状态保护程序。