当我传递一些数据时,输出类似于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;
}
答案 0 :(得分:0)
使用它的任何操作都会将width()
重置为0。基本思想是它不太可能适用于多个领域。特别是,它不太可能适用于值和分隔符。因此,应在每个值之前设置宽度。
对于您的具体用途,我会使用std::internal
和std::showbase
。另外,请确保为两位十六进制值使用unsigned
值:否则您将获得扩展的符号。