十六进制转十进制转换器

整段粘贴、逐行还原:自动剥 0x 前缀、兼容大小写,常规值走 parseInt(x, 16),超过安全整数 9007199254740991 自动改用 BigInt 精确计算并标注,不吃掉任何一位数字。

示例已就绪:10 行输入,其中 2 行超过安全整数,将用 BigInt 精确还原。
转换结果(默认显示前 12 行,数值仅作演示)
#输入十进制精度说明
常用十六进制 → 十进制对照表(服务端直出 12 行,数值仅作演示)
HEX十进制含义
11最小多位起点
99单字符最大十进制数字
A10首个字母位
F15单字符最大值
1016进位点 16¹
FF2551 字节最大值
1002562⁸,1 字节溢出点
3E81,000一千
FFFF65,5352 字节最大值
270F9,999四位十进制上界
1000065,5362¹⁶
FFFFFFFF4,294,967,2954 字节最大值(有符号解读为 −1)

使用方法

  1. 打开页面时输入框已预载 10 行示例(覆盖无前缀、0x 前缀、大小写混排和超长大数),直接点「转换为十进制」或按 Ctrl+Enter(Mac 用 Cmd+Enter)。
  2. 每行一个值,行首尾空白会被忽略,0x / 0X 前缀可有可无;示例第 4 行 0x3E8 会还原成 1,000。
  3. 结果表给出四个字段:行号、原输入、十进制值、精度说明。常规值标注「精确(Number)」,超过 9,007,199,254,740,991 的行标注「已用 BigInt」——示例里 0x1FFFFFFFFFFFFF 恰好是 Number 能精确表示的最后一个十六进制数。
  4. 某行不合法不会拖垮整批:第 3 行写错只会报「第 3 行:字符 G 不在 0-9 A-F 内」,其余行照常还原。
  5. 下方对照表与「加载更多」共 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、空格嵌入 → 报错
值 ≤ 0x1FFFFFFFFFFFFFNumber 精确输出1FFFFFFFFFFFFF → 9,007,199,254,740,991
值 > 0x1FFFFFFFFFFFFFBigInt 精确输出并标注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 面板自查。

相关工具

十六进制转十进制转换器只负责这一个方向,同族工具还有这些。