c++ - char * 十六进制地址到 ULONG64

标签 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

最佳答案

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

strtoll 在某些早期版本的 Visual Studio 中不可用

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

关于c++ - char * 十六进制地址到 ULONG64,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39647879/

相关文章:

c++ - 如何创建指向模板类的指针,C++

c - 我应该在 MSVC - C 上使用安全版本的 POSIX 函数吗

c++ - std::priority_queue 比较和队列元素的年龄

c++ - 我的头文件和 C++ 实现文件有问题

c++ - 使用 epoll 的套接字服务器在断开连接时给出未知字节

visual-c++ - Visual Studio 中的 CMake 项目给出标志覆盖警告(命令行警告 D9025 : overriding '/W4' with '/w' )

internet-explorer - 如何使用 Visual C++ 在 IE 中的打印模板中将 __IE_PrinterCmd_DevMode 属性设置为 DEVMODE 结构

C++ 嵌套 For 循环

c++ - c++中的模糊函数

c++ - 在 Mac 上的 Netbeans 8.0.2 上正确配置 C++11