cout标志只对第一个输出有效

C++ - cout flags work only for first output

本文关键字:输出 有效 第一个 标志 cout      更新时间:2023-10-16

当我传递一些数据时,输出类似于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;
    }

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

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