我一直试图以uint64十六进制格式将数字转换为字符串.但它应该包括零.例:
uint i = 1;
std::ostringstream message;
message << "0x" << std::hex << i << std::dec;
...
Run Code Online (Sandbox Code Playgroud)
这将产生:
0x1
Run Code Online (Sandbox Code Playgroud)
但这不是我想要的.我想要:
0x0000000000000001
Run Code Online (Sandbox Code Playgroud)
或者uint64需要多个零.
您可以使用IO操纵器:
#include <iomanip>
#include <iostream>
std::cout << std::setw(16) << std::setfill('0') << std::hex << x;
Run Code Online (Sandbox Code Playgroud)
或者,您可以更改格式标志上分别std::cout用std::cout.setf(std::ios::hex)等,如看这里("格式化") .请注意每次都必须设置字段宽度,因为它只影响下一个输出操作,然后恢复为默认值.
要以独立于平台的方式获取十六进制数字的真实数量,您可以说出类似于sizeof(T) * CHAR_BIT / 4 + (sizeof(T)*CHAR_BIT % 4 == 0 ? 0 : 1)参数的内容setw.