javascript中将二进制或十六进制字符串转为十进制数字最直接标准的方式是使用parseint()并传入对应进制基数,如parseint("1010", 2)得10、parseint("ff", 16)得255,支持带"0b"/"0x"前缀的字符串,但需基数匹配;避免使用number()因不支持显式进制且行为不一致。

JavaScript 中将二进制或十六进制字符串转为十进制数字,最直接、标准的方式是使用 parseInt() 并传入对应进制基数(radix)。
用 parseInt() 显式指定进制
parseInt() 是专为此类转换设计的内置函数。它接受两个参数:待转换的字符串和进制数(2 表示二进制,16 表示十六进制)。注意:字符串可带前缀(如 "0b"、"0x"),但不强制要求;若带前缀,需确保基数匹配,否则可能被忽略或出错。
- 二进制字符串:
parseInt("1010", 2)→ 10 - 十六进制字符串:
parseInt("FF", 16)→ 255 - 带前缀也支持(但基数仍需明确):
parseInt("0b1101", 2)→ 13;parseInt("0xFF", 16)→ 255 - 若字符串含非法字符(如
"102"用基数 2),解析会在第一个无效字符处停止:parseInt("102", 2)→ 2(只解析了"10")
注意:避免隐式转换和 Number() 的陷阱
Number() 函数不支持进制参数,且对带前缀的字符串行为特殊:
-
Number("0xFF")→ 255(自动识别0x) -
Number("0b101")→ 101(不会按二进制解析,而是当作十进制数字字符串) -
Number("1010")→ 1010(纯数字字符串始终按十进制解释)
因此,不要依赖 Number() 处理非十进制字符串,它不可靠且不显式。
更严格的转换:配合正则或 Number.isSafeInteger()
如果需要确保整个字符串都被有效解析(不允许尾随无效字符),可先校验再解析:
- 二进制校验:
/^[01]+$/,例如/^[01]+$/.test("1010") && parseInt("1010", 2) - 十六进制校验:
/^[0-9A-Fa-f]+$/,例如/^[0-9A-Fa-f]+$/.test("ff") && parseInt("ff", 16) - 还可检查结果是否为安全整数:
Number.isSafeInteger(result),避免大数精度丢失
补充:BigInt 支持大整数(ES2020+)
当字符串表示的数超出 Number.MAX_SAFE_INTEGER(约 9e15)时,可用 BigInt:
- 二进制 BigInt:
BigInt("0b1111111111111111111111111111111111111111111111111111111111111111") - 十六进制 BigInt:
BigInt("0xFFFFFFFFFFFFFFFF") - 注意:BigInt 字面量必须带
n后缀,但字符串构造器不要求前缀;parseInt()不支持 BigInt,必须用BigInt(str)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











