JavaScript中数字无十六进制存储,仅支持0x字面量解析、parseInt(str,16)转换、toString(16)格式化及hex与Uint8Array互转,注意前缀、大小写、非法字符和长度校验。

JavaScript 中的 Number 类型本身没有“十六进制数值”这一概念——所有数字在内存中都以 IEEE 754 双精度浮点格式存储,也就是统一的十进制逻辑值。所谓“十六进制运算”,实际是围绕字符串与数字之间的解析(parseInt)、格式化(.toString(16))以及字面量书写展开的操作。
十六进制字面量的正确写法与注意事项
你可以直接用 0x 或 0X 前缀定义整数,JS 引擎会立即转为十进制数值参与计算:
-
0xFF→ 值为 255,不是字符串 "FF" -
0xA0B1→ 值为 41137 - 字母不区分大小写:
0xfF和0xFF等价 - 含非法字符会报错:
0xG1、0xFZ语法错误
把字符串转成十六进制对应的十进制数
使用 parseInt(str, 16),必须显式传入基数 16,否则默认按十进制解析:
-
parseInt("ff", 16)→ 255 -
parseInt("A1B2", 16)→ 41394 -
parseInt("0xFF", 16)→ 255(前缀不影响,只要字符合法) -
parseInt("0xFF")→ 0(没给 radix,"0" 被当作十进制起始,后面非数字部分被忽略)
若想自动识别前缀(如 "0xFF"、"0b1010"),可用 Number():
立即学习“Java免费学习笔记(深入)”;
你是 TypeScript 项目架构专家,专注于脚手架搭建生产就绪的 Node.js 和前端应用。生成包含现代工具链(pnpm、Vite、Next.js)、类型
-
Number("0xFF")→ 255 -
Number("0x1a")→ 26 - 无效时返回
NaN,建议配合isNaN()校验
把十进制数转成十六进制字符串
调用数字的 .toString(16) 方法,结果小写、无前缀:
-
(255).toString(16)→ "ff" -
(16).toString(16)→ "10" -
(0).toString(16)→ "0" - 负数也支持:
(-255).toString(16)→ "-ff"
如需大写或补零,可链式处理:
- 大写:
(255).toString(16).toUpperCase()→ "FF" - 固定两位(常用于颜色值):
(10).toString(16).padStart(2, "0")→ "0a"
十六进制字符串与字节数组互转(实用场景)
在处理网络协议、加密或图像数据时,常需在 hex 字符串和 Uint8Array 之间转换:
- hex string → Uint8Array:
Uint8Array.from("aabbcc".match(/.{2}/g), b => parseInt(b, 16)) - Uint8Array → hex string:
Array.from(new Uint8Array([170, 187, 204]), b => b.toString(16).padStart(2,"0")).join("")→ "aabbcc"
注意:字符串长度需为偶数,否则 match() 可能返回 null,应提前校验。

















