Как использовать манипулятор для форматирования шестнадцатеричного вывода с заполненными левыми нулями
Ниже приведена небольшая тестовая программа:
И номер SS IS = 3039
Я хотел бы, чтобы число печаталось с заполненными левыми нулями, так что общая длина равна 8. Итак:
И номер SS IS = 00003039 (обратите внимание, что дополнительные нули остались заполненными)
И я хотел бы знать, как это сделать, используя манипуляторы и строковый поток, как показано ниже. Спасибо!
Программа тестирования:
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
int main()
{
int i = 12345;
std::stringstream lTransport;
lTransport << "And SS Number IS =" << std::hex << i << '\n';
std::cout << lTransport.str();
}
Ответы
Ответ 1
Посмотрели ли вы на библиотеки setfill и setw манипуляторы?
#include <iomanip>
...
lTransport << "And SS Number IS =" << std::hex << std::setw(8) ;
lTransport << std::setfill('0') << i << '\n';
Выход, который я получаю:
And SS Number IS =00003039
Ответ 2
Я бы использовал:
cout << std::hex << std::setw(sizeof(i)*2) << std::setfill('0') << i << std::endl;
Ответ 3
Вы можете использовать setw и setfill работает следующим образом:
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
#include <iomanip>
using namespace std;
int main()
{
int i = 12345;
std::stringstream lTransport;
lTransport << "And SS Number IS =" << setfill ('0') << setw (8)<< std::hex << i << '\n';
std::cout << lTransport.str(); // prints And SS Number IS =00003039
}