2

我需要显示从数据包二进制数据(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 行时,'0x0' 的前导零被省略了......

#include <iostream>
#include <iomanip>
...
cout << "oneline cout" << endl;
cout << hex << setfill ('0') << setw (4) << k << l << m << endl;
...

oneline cout
123405678

反正有没有显示像'123400005678'这样的一行cout?还是使用 cout 三次才能做到这一点?

先感谢您。

4

1 回答 1

3

字段宽度不是“粘性”的,因此您需要为打印出的每个字段再次设置它:

cout << hex << setfill ('0') << setw (4) << k << setw(4) << l << setw(4) << m << endl;

结果:

123400005678

填充字符粘性的,因此您通常希望在使用您设置的任何其他值后立即将其设置回空格字符:

cout << setfill(' ');
于 2015-06-01T05:07:22.413 回答