char * hex地址为ULONG64

时间:2016-09-22 19:58:36

标签: c++ visual-c++

我正在尝试将十六进制地址转换为ulong64,如下所示,但它们都没有工作。有没有正确的转换方式?

std::string s = "0x0000029078cc0000";
ULONG64 startAdress = _strtoul_l(s.c_str(), nullptr, 16, 0);
// output is 0x00000000ffffffff
_atoi64(address);
// output is 0x0000000000000000
sscanf(s.c_str(), "%16x", &startAdress);
// output is 0x000000009078cc00

1 个答案:

答案 0 :(得分:4)

_atoi64仅需要十进制格式,而不是十六进制格式。

某些早期版本的Visual Studio

中不提供

strtoll

sscanf使用"%llx""%I64x" format specifier

可以正常工作

您可能希望将编译器警告级别设置为4,编译器实际上可能会建议正确的格式说明符。

以下示例适用于VS2015:

ULONG64 startAdress;
std::string s = "0x0000029078cc0000";
std::cout << s << "\n";

startAdress = strtoll(s.c_str(), 0, 16);
printf("%I64x\n", startAdress);

if (sscanf_s(s.c_str(), "%llx", &startAdress) == 1)
    printf("%llx\n", startAdress);

if (sscanf_s(s.c_str(), "%I64x", &startAdress) == 1)
    printf("%I64x\n", startAdress);

std::cout << std::hex;
std::cout << startAdress << "\n";