c++中如何将16进制字符串转换为整数_c++ stoi与hex用法【实例】
技术百科
穿越時空
发布时间:2026-01-18
浏览: 次 stoi转换16进制字符串必须显式指定base=16且去除"0x"前缀,否则会失败或截断;推荐用stoul/stoull处理大数,stringstream配合std::hex更安全鲁棒。
stoi 转换 16 进制字符串必须显式指定 base
std::stoi 默认按十进制解析,直接传入 "0xFF" 或 "FF" 会失败或截断。必须传入第三个参数 16,且输入字符串**不能带 "0x" 前缀**(否则从第一个非数字字符起截断,"0xFF" 只取到 "0" 得 0)。
常见错误现象:stoi("0xFF") 报 std::invalid_argument;stoi("FF") 不报错但结果为 0(因默认 base=10,F 非十进制数字)。
- 正确写法:
stoi("FF", nullptr, 16)→ 255 - 带前缀需先去掉:
auto s = "0xFF"; if (s.substr(0, 2) == "0x") s = s.substr(2); stoi(s, nullptr, 16) - 若不确定前缀是否存在,用
std::stoul+std::hex流更鲁棒(见下节)
用 stringstream + hex 处理带 0x 前缀的字符串更安全
当输入可能含 "0x"、"0X" 前缀,或需统一处理多种进制时,s 配合 
std::hex 是更自然的选择。它自动跳过前导空白和 0x,且支持完整整数范围(避免 stoi 的 int 溢出问题)。
使用场景:解析配置文件中的内存地址、颜色值(如 "#AABBCC")、协议字段等含前缀的十六进制数据。
std::string s = "0xFF"; unsigned int val; std::stringstream ss(s); ss >> std::hex >> val; // val == 255 // 若 s = "0x100000000",用 unsigned long long + stoull 更稳妥
stoul / stoull 比 stoi 更适合十六进制大数
十六进制字符串常表示地址、哈希、掩码等大数值,stoi 返回 int(通常 32 位),容易溢出。应优先用 std::stoul(unsigned long)或 std::stoull(unsigned long long),它们同样支持 base=16 参数。
性能与兼容性影响:所有 stox 系列函数底层调用 strtol/strtoul,开销接近;但 stoull 在 32 位平台仍可安全解析 64 位十六进制值(如 "FFFFFFFFFFFFFFFF")。
-
stoul("FFFFFFFF", nullptr, 16)→ 4294967295(32 位全 1) -
stoull("10000000000000000", nullptr, 16)→ 18446744073709551616(16^16) - 错误处理:检查异常或用
end指针判断是否全部转换成功
注意 locale 和空格导致的静默失败
默认 std::stoi 和 std::stoul 使用 C locale,但若程序中修改过全局 locale(如调用 std::setlocale(LC_ALL, "")),可能导致十六进制字母 a-f 解析失败(某些 locale 把 a 当作数字)。同时,这些函数**不跳过首尾空格**——" FF " 会直接抛 invalid_argument。
- 安全做法:手动 trim 字符串,例如
s.erase(0, s.find_first_not_of(" \t\n\r")); s.erase(s.find_last_not_of(" \t\n\r") + 1); - 避免 locale 干扰:用
std::stringstream时可显式 imbuestd::locale::classic() - 调试技巧:打印
s.data()和s.size(),确认无不可见字符(如 BOM、\r、\0)
0x 就会让整个包解析失败。
# 看着
# 第一个
# 第三个
# 能带
# 会让
# 跳过
# 则会
# 若不
# 配置文件
# auto
# c++
# if
# int
# 指针
# stream
# 字符串
# 报错
# bom
# 更适合
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- 为什么Go需要go mod文件_Go go mod
- 如何诊断并终止卡死的 multiprocessin
- Windows 10怎么把任务栏放在屏幕上方_Wi
- 如何在 Go 中判断变量是否为函数类型
- Win11怎么关闭系统推荐内容_Windows11
- c++怎么实现大文件的分块读写_c++ 文件指针s
- PHP cURL GET请求:正确设置请求头与身份
- php中常量能用::访问吗_类常量与作用域操作符使
- MAC怎么用连续互通相机里的“桌上视角”_MAC在
- 如何在Golang中实现服务熔断与限流_Golan
- Mac如何创建和管理多个桌面空间_Mac高效多任务
- Win10如何更改电脑休眠时间_Windows10
- Win11怎么设置默认PDF阅读器 Win11修改
- Win11怎么查看已连接wifi密码 Win11查
- 如何在 VS Code 中正确配置并使用 NumP
- 如何在 Windows 11 中使用 AlomWa
- c++中如何使用std::variant_c++1
- Win11怎么设置屏保_Windows 11屏幕保
- 一文教你快速开通网站LOGO图
- Win11怎么设置组合键快捷方式_Windows1
- Win11怎么更改计算机名_Windows11系统
- 如何在Golang中实现自定义Benchmark_
- VSC怎么在PHP中调试MySQL_数据库交互排查
- windows 10应用商店区域怎么改_windo
- Windows10怎么备份注册表_Windows1
- Python异步网络编程_aiohttp说明【指导
- Windows10如何更改盘符名称_Win10重命
- Python函数参数高级用法_默认值与可变参数解析
- c# 如何用c#实现一个支持优先级的任务队列
- Mac如何解压zip和rar文件?(推荐免费工具)
- php订单日志怎么在swoole写_php协程sw
- Windows10系统更新错误0x80070002
- 作用域操作符会影响性能吗_php静态调用性能分析【
- Python技术债务管理_长期维护解析【教程】
- Win11麦克风没声音怎么设置_Win11麦克风权
- Windows10如何更改日期格式_Win10区域
- Python异步编程高级项目教程_asyncio协
- c++ std::atomic如何保证原子性 c+
- 如何使用Golang构建简易投票统计功能_Gola
- Win11怎么关闭自动修复_跳过Win11开机自动
- 如何使用Golang实现函数指针_函数变量与回调示
- Win11讲述人怎么关闭_Win11误触开启语音朗
- PythonGIL机制理解_多线程限制解析【教程】
- 当网站SEO排名下降时,如何应对?
- Win11怎么关闭搜索历史_Win11清除任务栏搜
- Win11怎么关闭透明效果_Windows11辅助
- c++中的Tag Dispatching是什么_c
- Win11怎么调整屏幕亮度_Windows 11调
- 如何使用Golang defer优化性能_减少不必
- Win11怎么清理C盘系统错误报告_Win11清理

QQ客服