我需要显示从数据包二进制数据(0x123400005678)解析的三个值。
unsigned int k = 0x1234, l=0x0, m=0x5678;
使用cout 3次即可显示四位十六进制值。
#include <iostream>
#include <iomanip>
...
cout << "seperated cout" << endl;
cout << hex << setfill ('0') << setw (4) << k;
cout << hex << setfill ('0') << setw (4) << l;
cout << hex << setfill ('0') << setw (4) << m << endl;
....
seperated cout
123400005678
但是当我只使用一个cout行时,'0x0'的前导零被省略......
#include <iostream>
#include <iomanip>
...
cout << "oneline cout" << endl;
cout << hex << setfill ('0') << setw (4) << k << l << m << endl;
...
oneline cout
123405678
有没有办法用一行cout来显示“123400005678”? 或者使用 cout 三次是唯一的方法吗?
提前谢谢您。
最佳答案
字段宽度不是“粘性”的,因此您需要为打印输出的每个字段重新设置它:
cout << hex << setfill ('0') << setw (4) << k << setw(4) << l << setw(4) << m << endl;
结果:
123400005678
填充字符是粘性的,因此您通常希望在使用您设置的任何其他值后立即将其设置回空格字符:
cout << setfill(' ');
关于c++ - 如何通过 C++ 中的一个 cout 语句计算中间零和前导零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30565911/