C ++ - cout标志仅适用于第一个输出

时间:2014-03-09 17:04:36

标签: c++ formatting iostream

当我传递一些数据时,输出类似于xxxxxxxx0x97 0x104 0x111 0x106 0x0 为什么cout格式化仅影响第一个输出?

void Dumper::hex(const unsigned char * data, size_t len) {

        cout << endl;

        ios::fmtflags f(cout.flags());

        /*
        cout.fill('0');
        cout.width(2);
        */

        cout.fill('x');
        cout.width(10);

        for (int i = 0; i < len; i++) {
            cout << "0x" << ((long)(data[i]) & 255) << " ";
        }

        cout.flags(f);
        cout << endl;

    }

1 个答案:

答案 0 :(得分:0)

使用它的任何操作都会将width()重置为0。基本思想是它不太可能适用于多个领域。特别是,它不太可能适用于值和分隔符。因此,应在每个值之前设置宽度。

对于您的具体用途,我会使用std::internalstd::showbase。另外,请确保为两位十六进制值使用unsigned值:否则您将获得扩展的符号。