Какую директиву я могу дать потоку для вывода начальных нулей на число в C++?
Я знаю, как заставить его быть в шестнадцатеричном виде:
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 ответов
Решение
Это не так чисто, как хотелось бы, но вы можете изменить символ "заливка" на "0", чтобы сделать работу:
your_stream << std::setw(2) << std::hex << std::setfill('0') << x;
Однако обратите внимание, что символ, который вы установили для заливки, является "липким", поэтому после этого он будет оставаться "0", пока вы не восстановите его в пространство с чем-то вроде your_stream << std::setfill(' ');
,
Это работает:
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
int x = 0x23;
cout << "output: " << setfill('0') << setw(3) << hex << x << endl;
}
выход: 023
glog << "Output: " << std::setfill('0') << std::hex(2) << int(myNum) << endl;
Смотрите также: http://www.arachnoid.com/cpptutor/student3.html
Это немного грязно, но макрос сделал для меня хорошую работу:
#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