【发布时间】:2014-02-20 09:22:55
【问题描述】:
假设我有一个 dword,我想用 std::cout 和左填充零输出十六进制,所以 0xabcd 将显示为 0x0000abcd。看来您必须这样做:
uint32_t my_int = 0xabcd;
std::cout << "0x" << std::hex << std::setw(8) << std::setfill('0')
<< my_int << std::endl;
这对于可以在 C 中使用 printf("0x%08X\n", my_int); 完成的事情来说似乎很荒谬。有什么办法可以缩短这个时间,同时仍然使用 std::cout 进行输出(除了使用命名空间 std)?
【问题讨论】:
-
编写一个函数以格式化十六进制输出并调用它。
-
较短是相对的,我想。如果您认为
printf()背后的代码很短,我可以向您保证,它绝不是。您只需要自己滚动(看起来与您在这里的相似)。你总是可以编写一个操纵器类/运算符对,允许类似std::cout << as_hex(n,8,0); -
为了让它更短,我会使用宏来隐藏丑陋,例如
#define PAD_HEX(digits) std::hex << std::setw(digits) << std::setfill('0')然后在后面的代码中将其用作std::cout << "0x" << PAD_HEX(8) << my_int ..