我需要显示三个从数据包二进制数据(0x123400005678)解析的值。
unsigned int k = 0x1234, l=0x0, m=0x5678;
当我使用cout三次时,我可以显示四位十六进制值。
#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线时,前导零为&#39; 0x0&#39;省略...
#include <iostream>
#include <iomanip>
...
cout << "oneline cout" << endl;
cout << hex << setfill ('0') << setw (4) << k << l << m << endl;
...
oneline cout
123405678
无论如何都要显示像&#39; 123400005678&#39;一线cout? 或者只使用cout三次这样做?
提前谢谢。
答案 0 :(得分:3)
字段宽度不是“粘性”,因此您需要为打印的每个字段再次设置它:
cout << hex << setfill ('0') << setw (4) << k << setw(4) << l << setw(4) << m << endl;
结果:
123400005678
填充字符是粘性的,所以你通常想在使用你设置的任何其他值时立即将它设置回空格字符:
cout << setfill(' ');