9

我知道如何使它成为十六进制:

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

那么我该怎么做呢?

4

5 回答 5

14

它不像我想要的那样干净,但是您可以将“填充”字符更改为“0”来完成这项工作:

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

但是请注意,您为填充设置的字符是“粘性的”,因此在执行此操作后它将保持“0”,直到您将其恢复为具有类似your_stream << std::setfill(' ');.

于 2011-02-27T02:42:23.263 回答
2

这有效:

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

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

输出:023

于 2011-02-27T02:44:37.227 回答
1
glog << "Output: " << std::setfill('0') << std::hex(2) << int(myNum) << endl;

另见:http ://www.arachnoid.com/cpptutor/student3.html

于 2011-02-27T02:42:01.533 回答
1

看看<iomanip>中的setfill和操纵器setw

于 2011-02-27T02:42:08.570 回答
0

它有点脏,但是宏对我来说做得很好:

#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;

输出:

我的十六进制值 = 0x00012345

于 2014-05-22T22:41:58.917 回答