0

0

c++如何将hex字符串转为int_c++十六进制转换【示例】

冰火之心

冰火之心

发布时间:2026-01-26 13:08:04

|

725人浏览过

|

来源于php中文网

原创

std::stoi转hex最简单但需指定base=16或0,支持大小写和"0x"前缀;非法字符抛异常,尾部垃圾被忽略;超int范围须用std::stoul/stoull,严格校验需std::strtol配合endptr。

c++如何将hex字符串转为int_c++十六进制转换【示例】

std::stoi 直接转 hex 字符串最简单

只要字符串是标准格式(如 "FF""0x1A""fF"),std::stoi 是最快捷的选择。它支持自动识别前缀("0x""0X"),也支持大小写混合的十六进制字符。

关键点:必须显式传入 base = 16,否则默认按十进制解析;如果含 "0x" 前缀,std::stoi 会自动跳过,但前提是 base 设为 016 —— 更稳妥的做法是统一用 16 并确保输入不含前缀,或统一带前缀后设 base = 0

std::string s = "0xFF";
int x = std::stoi(s, nullptr, 0); // base=0 → 自动识别前缀
// 或
s = "FF";
x = std::stoi(s, nullptr, 16); // 明确 base=16,不依赖前缀
  • 抛异常:输入非法(如 "G1")时抛 std::invalid_argument;溢出时抛 std::out_of_range
  • 不检查尾部垃圾字符:"FFabc" 会被静默转成 255stoi 只读到第一个非法字符为止
  • 只适用于 int 范围(通常是 32 位有符号),超范围会溢出报错

需要更严格解析?用 std::strtol 控制细节

std::strtol 是 C 风格函数,但控制力更强,适合需验证完整字符串、处理长整型、或兼容旧编译器的场景。它返回 long,并用 endptr 指出解析停在哪——这是判断是否“全字符串有效”的核心。

const char* s = "1A3F";
char* end;
long x = std::strtol(s, &end, 16);
if (*end != '\0') {
    // 解析未覆盖整个字符串,例如 "1A3FG" 或 "1A3F "
}
  • base = 0 同样支持自动识别 "0x" 前缀;base = 16 则忽略前缀,把 "0xFF" 当作非法(因为 '0' 不是合法 hex 字符)
  • 返回值类型是 long,在 64 位系统上常为 64 位,但仍是带符号类型;若需无符号或更大范围,考虑 std::strtoulstd::stoul
  • 注意 endptr 必须非空,且调用后要检查是否走到末尾,否则无法区分 "FF""FFxx"

处理大写/小写、空格、前缀混杂?先预处理再转

标准转换函数不自动 trim 空格,也不强制大小写归一化。如果输入可能含首尾空格、大小写混用、甚至多余前缀(如 " 0x AbC "),直接转容易失败或误读。

立即学习C++免费学习笔记(深入)”;

illostrationAI
illostrationAI

AI插画生成,lowpoly、3D、矢量、logo、像素风、皮克斯等风格

下载

安全做法是手动清洗:

std::string clean_hex(const std::string& s) {
    std::string out;
    for (char c : s) {
        if (std::isxdigit(c)) out += std::tolower(c);
    }
    return out;
}
// 使用:
std::string raw = " 0x AbC ";
int x = std::stoi(clean_hex(raw), nullptr, 16); // → 2748
  • 不要依赖 std::isspace + erase 做 trim,因为 hex 字符串中间不该有空格;真正要的是“只留 0-9 a-f A-F”
  • std::tolower 安全处理非字母字符,可直接对整个字符串调用
  • 如果原始字符串必须保留语义(如错误定位),那就别清洗,改用 strtol + endptr 定位非法位置

超 32 位或需无符号?换用 std::stoul / std::stoull

当 hex 字符串表示的值超过 INT_MAX(如 "FFFFFFFF" 在 32 位系统上是 4294967295,已超出 int 正数范围),必须用无符号类型转换函数,否则抛 std::out_of_range

  • std::stoulunsigned long(至少 32 位)
  • std::stoullunsigned long long(至少 64 位),推荐用于任意长度 hex 字符串
  • 它们的行为和 stoi 几乎一致:同样支持 base=016,同样抛异常,同样忽略尾部无效字符
  • 示例:std::stoull("FFFFFFFFFFFFFFFF", nullptr, 16) 在支持的平台上能正确返回 18446744073709551615

真正容易被忽略的是:即使你声明了 uint64_t x,如果用 std::stoi 赋值,转换过程已在 int 范围内截断或报错——类型声明不改变转换函数本身的语义。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

298

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

212

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1498

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

623

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

592

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

587

2024.04.29

go语言字符串相关教程
go语言字符串相关教程

本专题整合了go语言字符串相关教程,阅读专题下面的文章了解更多详细内容。

170

2025.07.29

c++字符串相关教程
c++字符串相关教程

本专题整合了c++字符串相关教程,阅读专题下面的文章了解更多详细内容。

83

2025.08.07

拼多多赚钱的5种方法 拼多多赚钱的5种方法
拼多多赚钱的5种方法 拼多多赚钱的5种方法

在拼多多上赚钱主要可以通过无货源模式一件代发、精细化运营特色店铺、参与官方高流量活动、利用拼团机制社交裂变,以及成为多多进宝推广员这5种方法实现。核心策略在于通过低成本、高效率的供应链管理与营销,利用平台社交电商红利实现盈利。

31

2026.01.26

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Git 教程
Git 教程

共21课时 | 3万人学习

Git版本控制工具
Git版本控制工具

共8课时 | 1.5万人学习

Git中文开发手册
Git中文开发手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号