Какую директиву я могу дать потоку для вывода начальных нулей на число в C ++? - PullRequest
9 голосов
/ 27 февраля 2011

Я знаю, как заставить его быть в шестнадцатеричном виде:

unsigned char myNum = 0xA7;
clog << "Output: " std::hex << int(myNum) << endl;
// Gives:
//   Output: A7

Теперь я хочу, чтобы он всегда печатал начальный ноль, если myNum требуется только одна цифра:

unsigned char myNum = 0x8;
// Pretend std::hex takes an argument to specify number of digits.
clog << "Output: " << std::hex(2) << int(myNum) << endl;
// Desired:
//   Output: 08

Таккак я могу на самом деле это сделать?

Ответы [ 5 ]

14 голосов
/ 27 февраля 2011

Это не так чисто, как хотелось бы, но вы можете изменить символ «заливка» на «0», чтобы выполнить работу:

your_stream << std::setw(2) << std::hex << std::setfill('0') << x;

Обратите внимание, однако, что символ, который вы установили для заливки, является «липким», поэтому после этого он будет оставаться «0», пока вы не восстановите его в пробел с чем-то вроде your_stream << std::setfill(' ');.

2 голосов
/ 27 февраля 2011

Это работает:

#include <iostream>
#include <iomanip>
using namespace std;

int main() {
  int x = 0x23;
  cout << "output: " << setfill('0') << setw(3) << hex << x << endl;
}

выход: 023

1 голос
/ 27 февраля 2011

Посмотрите на манипуляторы setfill и setw в

1 голос
/ 27 февраля 2011
glog << "Output: " << std::setfill('0') << std::hex(2) << int(myNum) << endl;

Смотри также: http://www.arachnoid.com/cpptutor/student3.html

0 голосов
/ 23 мая 2014

Это немного грязно, но макрос хорошо сработал для меня:

#define fhex(_v) std::setw(_v) << std::hex << std::setfill('0')

Итак, вы можете сделать это:

#include <iomanip>
#include <iostream>
...
int value = 0x12345;
cout << "My Hex Value = 0x" << fhex(8) << value << endl;

Выход:

My Hex Value = 0x00012345

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...