将uint64转换为(完整)十六进制字符串,C++

Ram*_*ono 1 c++

我一直试图以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需要多个零.

Ker*_* SB 5

您可以使用IO操纵器:

#include <iomanip>
#include <iostream>

std::cout << std::setw(16) << std::setfill('0') << std::hex << x;
Run Code Online (Sandbox Code Playgroud)

或者,您可以更改格式标志上分别std::coutstd::cout.setf(std::ios::hex)等,如看这里("格式化") .请注意每次都必须设置字段宽度,因为它只影响下一个输出操作,然后恢复为默认值.

要以独立于平台的方式获取十六进制数字的真实数量,您可以说出类似于sizeof(T) * CHAR_BIT / 4 + (sizeof(T)*CHAR_BIT % 4 == 0 ? 0 : 1)参数的内容setw.