使用方法
- 打开页面时输入框已预载 10 行示例(覆盖无前缀、0x 前缀、大小写混排和超长大数),直接点「转换为十进制」或按 Ctrl+Enter(Mac 用 Cmd+Enter)。
- 每行一个值,行首尾空白会被忽略,
0x/0X前缀可有可无;示例第 4 行0x3E8会还原成 1,000。 - 结果表给出四个字段:行号、原输入、十进制值、精度说明。常规值标注「精确(Number)」,超过 9,007,199,254,740,991 的行标注「已用 BigInt」——示例里 0x1FFFFFFFFFFFFF 恰好是 Number 能精确表示的最后一个十六进制数。
- 某行不合法不会拖垮整批:第 3 行写错只会报「第 3 行:字符 G 不在 0-9 A-F 内」,其余行照常还原。
- 下方对照表与「加载更多」共 24 行常用值(含 FFFFFFFF = 4,294,967,295、0x1FFFFFFFFFFFFFFF = 2,305,843,009,213,693,951 等),「导出 CSV」带 BOM,「复制对照表」按制表符复制。
这个十六进制转十进制转换器能解决什么
调试内存转储、颜色值、协议报文时拿到的是十六进制串,要还原成十进制给人读:比如 0xDEADBEEF 还原成 3,735,928,559,0x7FFFFFFF 确认是 32 位有符号最大值 2,147,483,647。逐行批量处理免去一行一回车地试。
处理超大十六进制 ID:区块链哈希截段、雪花 ID 的十六进制形态、64 位地址常超过 JavaScript 安全整数。本页对超过 9,007,199,254,740,991 的值自动切换 BigInt,示例里 0x1FFFFFFFFFFFFFFF 精确还原成 2,305,843,009,213,693,951——如果只用 parseInt,结果会变成 2,305,843,009,213,694,000 附近的近似数,尾部数字是假的。
核对补码语义:同一个 0xFFFFFFFF,无符号读是 4,294,967,295,按 32 位补码读是 −1;0x80000000 无符号是 2,147,483,648,补码读是 −2,147,483,648。本页输出无符号值并标注补码解读,两种口径不打架。
本页只做 hex → 十进制;要反过来把十进制转成十六进制,用同分类的十进制转十六进制转换器;要把十六进制还原成文本字符,用十六进制转文本转换器,两个方向的核心词与实现各归各页。
原理与规则说明
十六进制转十进制转换器的常规路径调用 parseInt(s, 16):第二参数显式指定进制,输入大小写不敏感,且自动容忍一个可选的 0x 前缀和前后空白。它的价值在于快;它的坑在于两条静默规则——遇到第一个非法字符就地截断(parseInt('0xFFg', 16) 返回 255 而不是报错),以及超过安全整数后悄悄丢精度。
精度边界是本页的核心设定:IEEE 754 双精度浮点能精确表示的整数上界是 Number.MAX_SAFE_INTEGER = 9,007,199,254,740,991,写成十六进制恰好是 0x1FFFFFFFFFFFFF(13 个 F 之外的完整位型)。从 0x20000000000000(即 2⁵³ = 9,007,199,254,740,992)开始,尾数位不够用,末位开始失真。本页把每个结果与 BigInt('0x' + s) 的精确值比对,越界行直接输出 BigInt 结果并标注,实测 0x123456789ABCDEF12 用 parseInt 得 20,988,295,479,420,645,000、BigInt 得 20,988,295,479,420,645,138,尾部差了 138。
BigInt 的正确写法是 BigInt('0x' + s) 而不是 BigInt(parseInt(...))——后者已经先丢了精度,转 BigInt 也救不回来。也不能写十六进制字面量拼接,输入是字符串时只能走字符串构造。本页对每个值同时跑两条路径、比对一致才放行 Number 结果,这就是结果表第四列的来源。
负数与补码:JavaScript 的 parseInt 永远返回无符号解释(0xFFFFFFFF = 4,294,967,295),不会因为首位是 8 以上就给负数。要按补码读,需要显式按位截断:32 位用 parseInt(s, 16) | 0(0xFFFFFFFF → −1,0x80000000 → −2,147,483,648),8 位用 0xFF → −1、0x80 → −128。本页在结果里把两种解读都标注,避免「地址怎么是负的」这类误会。
输入到输出的完整链路:按行拆分 → 修剪空白与 0x 前缀 → 正则 /^[0-9a-fA-F]+$/ 校验(不合法时报出行号和首个坏字符,不截断不猜)→ 双路径计算(parseInt 与 BigInt)→ 值 ≤ 9,007,199,254,740,991 输出 Number、否则输出 BigInt → 千分位格式化进表。空行跳过,不计数不报错。
完整示例(数值仅作演示)
默认示例 10 行:FF → 255,FFFF → 65,535,270F → 9,999,0x3E8 → 1,000,DEADBEEF → 3,735,928,559,7FFFFFFF → 2,147,483,647(32 位有符号最大值),FFFFFFFF → 4,294,967,295(补码读作 −1)。控件预载值、本段、对照表行三处一致。
大数示例:1FFFFFFFFFFFFF → 9,007,199,254,740,991,标注「精确(Number)」,它是安全区里最大的十六进制数;下一行 20000000000000 → 9,007,199,254,740,992,标注「已用 BigInt」,这是 2⁵³,Number 恰好还能表示但再往上就丢;最后一行 1FFFFFFFFFFFFFFF → 2,305,843,009,213,693,951,parseInt 路径已经错到千位。
截断陷阱示例:把某行改成 0xFFg,本页不会像 parseInt 那样静默返回 255,而是报「字符 G 不在 0-9 A-F 内」——先于精度问题,录入错误就该被拦下。
输入范围与对照表
输入范围:整段文本 ≤ 200KB、每行 ≤ 4,096 字符(超长十六进制串通常是数据损坏,先怀疑来源);行数无硬限制,10 万行以内本地毫秒级完成。合法字符集为 0-9、a-f、A-F,前缀 0x/0X 可选。
| 输入情形 | 处理 | 示例 |
|---|---|---|
| 纯十六进制字符 | 正常还原 | DEADBEEF → 3,735,928,559 |
| 带 0x 前缀 | 剥前缀后还原 | 0x3E8 → 1,000 |
| 大小写混排 | 等价处理 | ff / FF / Ff → 255 |
| 含非法字符 | 拒绝该行,报首个坏字符 | G、Z、空格嵌入 → 报错 |
| 值 ≤ 0x1FFFFFFFFFFFFF | Number 精确输出 | 1FFFFFFFFFFFFF → 9,007,199,254,740,991 |
| 值 > 0x1FFFFFFFFFFFFF | BigInt 精确输出并标注 | 20000000000000 → 9,007,199,254,740,992 |
| 空行 / 纯空白行 | 跳过 | 不报错不计行 |
| 行超 4,096 字符 | 拒绝该行 | 提示先确认数据来源 |
服务端直出的 12 行对照表覆盖单字符、进位点、字节边界(FF / 100 / FFFF / 10000 / FFFFFFFF)四个层次;「加载更多」追加的 12 行进入大数区,含 0x1FFFFFFFFFFFFF 和 0x1FFFFFFFFFFFFFFF 两个安全区边界样本。
输入范围、边界与精度说明
每条非法路径的文案:整段为空提示「输入为空:请粘贴十六进制文本,每行一个值」;第 N 行含非法字符报「第 N 行「原行内容」:字符 X 不在 0-9 A-F 内,请检查是否混入了十进制以外的字母」;行超长报行号与长度上限;整体超 200KB 报当前体积。没有截断、没有静默归零、没有吞行。
精度边界写死在代码里:安全上界取 Number.MAX_SAFE_INTEGER = 9,007,199,254,740,991(0x1FFFFFFFFFFFFF),判定方式是与 BigInt 值全等比对而不是只看位数——同为 14 位十六进制,0x10000000000000 = 4,503,599,627,370,496 仍在安全区内,0x20000000000000 = 9,007,199,254,740,992 就已经出界。按位数估界会把这种边界值判错,按值比对不会。
输出格式边界:千分位用 Intl 分组(en-US 逗号),BigInt 与 Number 统一处理;原始值与分组值都能从结果表复制。若要粘回程序,用「复制结果」得到的是制表符分隔的原始列。
常见误用:把颜色值当数还原——#F59E0B 里的 F59E0B 是三通道打包,拆成十进制 16,107,019 毫无意义,应按两位一组拆成 245、158、11;另一个误用是给本页喂二进制串,0b1010 里的 b 是合法十六进制字符(= 11),会得到错误的「成功」,进制错了工具不报错,请先确认数据是 hex。
常见问题
超过多少会丢精度?
十进制 9,007,199,254,740,991(十六进制 0x1FFFFFFFFFFFFF)以内精确;从 0x20000000000000 = 9,007,199,254,740,992(2⁵³)起 Number 尾数不够,本页自动改用 BigInt 并在精度列标注。
为什么 parseInt 不直接报错而要小心?
parseInt 遇到首个非法字符就截断:parseInt('0xFFg', 16) 返回 255 且无任何提示;超安全区后末位悄悄变化。本页先做全串正则校验、再用 BigInt 比对,把这两类静默错误都拦成显式报错。
0xFFFFFFFF 为什么不是负数?
parseInt 只有无符号一种解读,返回 4,294,967,295。补码解读要显式按位截断:|0 之后是 −1。本页把两种口径都标在结果里,按需取用。
BigInt('0x' + s) 和 BigInt(parseInt(s, 16)) 有什么区别?
后者先把字符串变成已丢精度的 Number,再转 BigInt 也无法恢复真实值;前者直接从十六进制字符串构造精确值。本页所有大数都走前者。
能一次转换多少行?
10 万行以内毫秒级;超过 200KB 会先提示精简。转换全在本地,不排队不上传。
结果里的千分位逗号会影响复制吗?
「复制结果」输出的是制表符分隔的原始列(无千分位),可直接粘进代码或表格软件;表格里显示的分组只是阅读格式。
和「十进制转十六进制」是同一个工具吗?
不是,方向相反、算法不同:本页用 parseInt/BigInt 解析十六进制串,那页用 toString(16) 生成。两页不复用核心词,也不互相内链。
输入会被上传吗?
不会。解析用浏览器内置函数,全程本地执行,无网络请求,可在开发者工具 Network 面板自查。
相关工具
十六进制转十进制转换器只负责这一个方向,同族工具还有这些。
- 十六进制转文本转换器——把 hex 按字符编码还原成可读文本,与本页共用前缀剥离规则。
- 十六进制转二进制转换器——每一位 hex 对应 4 位二进制,看位型时用。
- 二进制转十进制转换器——只有 0/1 的输入走这条线,位运算调试常用。
- 八进制转十进制转换器——Linux 权限位 755 这类八进制值的还原。
- 数字进制转换器——2~36 任意进制互转的通用版。
- 十六进制计算器——还原之后还要按十六进制做加减运算时用。