【发布时间】:2010-07-07 10:56:22
【问题描述】:
我有以下代码(简化):
ostringstream oss;
oss << "Text ";
oss << hex << uppercase;
oss.width(8);
oss.fill('0');
oss << var1 << " ";
oss << var2 << " ";
oss << dec << nouppercase;
oss.width(1);
oss << var3 << " another text." << endl;
string result = oss.str();
// work with result...
其中var1、var2 是unsigned int,var3 是int。这个想法是创建一个字符串,其中var1 和var2 的格式类似于十六进制数字(但没有0x),var3 格式为常规整数。我发现只有第一个数字格式正确,第二个数字没有填充零:
Text 000AF00C 3B7FF 1 another text.
过了一会儿,我发现再次设置宽度和填充参数可以解决这个问题。有没有办法避免为每个数字一遍又一遍地指定这些格式规则?格式化变量的数量远高于 2,这只是一个简化的示例。将所有这些包装成一个函数是一种选择,但我真的很想学习如何使用ostringstream 保留格式。
【问题讨论】:
-
您确定不只是
width被重置,因为这将是您的实现中的错误吗? -
可能只是宽度,没有单独测试宽度/填充。
标签: c++ formatting stream