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

如何在C++中将十六进制字符串转换为long long类型

解决十六进制字符串转long long的问题

哈哈,这个坑我之前踩过!你遇到的核心问题是默认的转换函数都默认按十进制解析字符串,但你的"0005105C9A84BE03"是十六进制格式,而且长度刚好对应64位整数,得指定基数才能正确转换。下面给你两种靠谱的解决方法:

方法1:使用C风格的strtoll函数

之前你用strtoll没成功,大概率是没指定第三个参数(基数)。只要把基数设为16,就能正确解析十六进制字符串:

#include <cstdlib>
#include <string>
#include <iostream>

int main() {
    std::string myString = "0005105C9A84BE03";
    // 第三个参数16表示按十六进制解析字符串
    long long myVar = strtoll(myString.c_str(), nullptr, 16);
    std::cout << myVar << std::endl; // 输出:1425364798979587
    return 0;
}

解释一下:strtoll是专门处理64位整数的转换函数,nullptr表示不需要记录转换终止的位置,基数16会让函数识别十六进制的字符(A-F、a-f)。

方法2:使用C++11及以后的std::stoll函数

如果更习惯C++风格的写法,用std::stoll更贴合字符串操作,同样需要指定基数16:

#include <string>
#include <iostream>

int main() {
    std::string myString = "0005105C9A84BE03";
    long long myVar = std::stoll(myString, nullptr, 16);
    std::cout << myVar << std::endl; // 输出预期值
    return 0;
}

为什么之前的函数都失败了?

给你捋一下原因:

  • atoi/stoi:不仅默认按十进制解析,而且返回的是int类型(通常32位),你的目标值远超过32位整数的最大值(约2e9),直接溢出或解析错误。
  • strtol:返回的是long类型,很多平台上long还是32位,存不下64位的目标值;而且没指定基数的话,遇到十六进制字符(比如C、A)会直接停止解析,得到错误结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:44:45