You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++新手求教:如何将char*转换为uint64_t类型?

C++十六进制字符串转uint64_t的正确方法

你当前的代码存在核心错误:直接将char*指针强制转换为uint64_t,得到的是指针本身的内存地址,而非字符串中存储的十六进制数值。以下是几种可行的正确实现方式:

方法1:使用C标准库std::stoull(C11及以上)

这是最简洁的标准方案,支持自动识别0x前缀的十六进制字符串:

#include <string>
#include <cstdint>

int main() {
    char* offset = "0xC45AC8";
    // 第三个参数16指定按十六进制规则解析
    uint64_t hex_offset = std::stoull(offset, nullptr, 16);
    return 0;
}

方法2:使用C风格函数strtoull

适合偏好C风格工具的场景,还能额外做解析有效性检查:

#include <cstdlib>
#include <cstdint>
#include <cerrno>

int main() {
    char* offset = "0xC45AC8";
    char* end_ptr;
    errno = 0; // 重置错误标记
    uint64_t hex_offset = strtoull(offset, &end_ptr, 16);
    
    // 简单错误检查:若未解析到有效数值或数值超出范围
    if (end_ptr == offset || errno == ERANGE) {
        // 此处可添加错误处理逻辑,如打印提示
    }
    return 0;
}

针对“去除括号”的处理

如果你的原始字符串带有括号(例如(0xC45AC8)),需要先截取有效部分再解析:

#include <string>
#include <cstdint>

int main() {
    char* offset = "(0xC45AC8)";
    std::string str(offset);
    // 截取括号内的有效十六进制字符串
    std::string hex_part = str.substr(1, str.size() - 2);
    uint64_t hex_offset = std::stoull(hex_part, nullptr, 16);
    return 0;
}

内容的提问来源于stack exchange,提问作者NEKKITIS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 11:47:22