推荐使用 parseInt() 处理带前缀的二进制(0b/0B)和十六进制(0x/0X)字符串,传入 radix 0 可自动识别前缀;需注意旧式八进制歧义及非法字符静默截断问题。

JavaScript 中处理带前缀的二进制(0b 或 0B)和十六进制(0x 或 0X)字符串,推荐使用 parseInt(),它原生支持前缀识别,无需手动截取。
用 parseInt() 直接解析带前缀的字符串
parseInt() 第二个参数是进制基数(radix),但当字符串含标准前缀时,可传 0 让 JS 自动推断:
-
parseInt("0b1010", 2)→ 10(显式指定二进制) -
parseInt("0x1F", 16)→ 31(显式指定十六进制) -
parseInt("0b1010", 0)→ 10(自动识别0b) -
parseInt("0XFF", 0)→ 255(0X同样被识别)
注意:parseInt(str, 0) 在遇到 0b、0B、0x、0X 时会自动按对应进制解析;若字符串以 0 开头但无 b/x(如 "012"),在非严格模式下可能被误判为八进制(已废弃),所以明确传 2 或 16 更稳妥。
安全校验前缀再转换
若需确保输入格式合法(比如防止 "0b102" 这类非法二进制被静默转成 2),可先检测前缀并验证字符有效性:
立即学习“Java免费学习笔记(深入)”;
- 二进制:用正则
/^0b[01]+$/i匹配,再用parseInt(str, 2) - 十六进制:用正则
/^0x[0-9a-f]+$/i匹配,再用parseInt(str, 16) - 不匹配则返回
NaN或抛错,避免意外结果
转回字符串时补上前缀
数字转带前缀字符串,用 toString(radix) 后手动拼接:
-
(10).toString(2)→ "1010",补前缀:"0b" + (10).toString(2)→ "0b1010" -
(255).toString(16)→ "ff",补前缀:"0x" + (255).toString(16)→ "0xff" - 如需大写前缀或字母,可用
.toUpperCase():"0x" + (255).toString(16).toUpperCase()→ "0xFF"
常见陷阱提醒
以下操作容易出错,需留意:
-
Number("0b1010")→ 10(现代 JS 支持,但旧环境可能返回NaN,兼容性不如parseInt) -
parseInt("0b1010xyz", 2)→ 10(parseInt会忽略尾部无效字符,不是全量校验) -
parseInt("0B", 0)→ 0(空数字部分不报错,结果为 0,需额外判断长度)


















