贝利信息

C++ 怎么实现各种进制转换 C++ bitset与stringstream转换【工具】

日期:2026-01-25 00:00 / 作者:裘德小鎮的故事
std::bitset仅支持固定位宽二进制与整数互转:构造需指定模板参数,超长截断不报错;转十进制可能溢出抛异常;负数按补码解释;十六进制/八进制推荐用stringstream配合流操纵符。

std::bitset 做二进制 ↔ 十进制互转要注意位宽

std::bitset 不是通用进制转换工具,它本质是固定长度的二进制位容器。想把一个整数转成二进制字符串,得先知道最大位宽:

std::stringstream + std::hex/std::oct 转十六进制、八进制

这是最常用也最安全的整数 ↔ 其他进制字符串方案,依赖流操纵符控制输出格式:

二进制字符串 ↔ 整数:别硬套 bitset,优先用 std::stoul(..., nullptr, 2)

如果输入是运行时得到的二进制字符串(如 "10101"),std::bitset 反而麻烦——你得先算长度再写模板参数,还不能处理可变长或带空格/前缀的输入:

性能与边界:大数、前导零、跨平台兼容性

实际项目中容易忽略三点:

真正要灵活处理各种进制输入输出,std::stoul/std::stoull 配合 std::stringstream 是主力;std::bitset 只适合位宽确定、强调二进制语义(比如寄存器模拟、位操作掩码)的场景。别让它干解析字符串的活。