Мне нужно отобразить три значения, которые анализируются из двоичных данных пакета (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 три раза только для этого?
Заранее спасибо.
Ширина поля не является «липкой», поэтому вам нужно установить ее заново для каждого распечатываемого поля:
cout << hex << setfill ('0') << setw (4) << k << setw(4) << l << setw(4) << m << endl;
Результат:
123400005678
Заполняющий символ является однако, как правило, вы захотите установить его обратно в пробел, как только закончите, используя любое другое значение, которое вы установили:
cout << setfill(' ');