Как использовать манипулятор для форматирования моего шестнадцатеричного вывода с дополненными левыми нулями - PullRequest
10 голосов
/ 02 марта 2010

Маленькая тестовая программа ниже распечатывает:

И 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();

}

Ответы [ 3 ]

9 голосов
/ 02 марта 2010

Вы смотрели на наборные и сетевые манипуляторы библиотеки?

#include <iomanip>
...
lTransport << "And SS Number IS =" << std::hex << std::setw(8) ;
lTransport << std::setfill('0') << i << '\n';

Вывод, который я получаю:

And SS Number IS =00003039
3 голосов
/ 02 марта 2010

Я бы использовал:

cout << std::hex << std::setw(sizeof(i)*2) << std::setfill('0') << i << std::endl;
1 голос
/ 02 марта 2010

Вы можете использовать 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    
}
...