使用方法
- 在输入框里输入或粘贴十六进制字符串。支持 0x 或 0X 前缀,空格、逗号、下划线都可以作分隔符,字母大小写混写也行。示例用的是 1A3F。
- 勾选「按字节补齐」:当二进制位数不是 8 的整数倍时,在左侧补 0 到整字节。取消勾选则保留原始位数,多出来的半字节不会被补。
- 勾选「每 4 位分组」:按半字节(nibble)在每 4 位之间加一个空格,读起来与十六进制逐字对应;取消就是连续的 0/1 串。
- 「每行字节数」决定换行宽度,默认 8 字节一行,可填 1 到 32;在字节对齐开启时生效,用来把长串排成整齐的字节矩阵。
- 点「开始转换」,或在输入框里按 Ctrl(Mac 为 Cmd)+ Enter。Enter 单独按下是换行,不会触发转换;选项与输入变动时结果会自动刷新。
- 输出框内容可直接「复制结果」;下方片段对照表可「加载更多」展开到 27 行,也能「复制对照表」为制表符文本或「导出 CSV」带 BOM 保存。
这个十六进制转二进制转换器能解决什么问题
需要看清「一个数在每一位上到底是 0 还是 1」的时候就要用它。读单片机的寄存器手册,某个控制寄存器常写成 0x1A3F,展开成二进制才能对上每一位的定义;排查通信协议帧,帧头帧尾常用十六进制记,转成二进制才能按位核验标志位;处理权限位掩码(如 Linux 的 rwx 位、Windows 的 ACL 位),十六进制 0x1FF 换成 9 位二进制就知道开了哪几个权限;看内存转储、GUID、颜色值、位图数据时,也都需要把紧凑的十六进制摊开成逐位的二进制。这个工具的定位很明确:只做十六进制转二进制这一个方向。同站还有反方向的二进制转十六进制、以及十进制与十六进制之间的互换工具,它们处理的是别的方向,需要反过来查时请用对应的页面。本页把输入按半字节逐位映射,不做任何数值近似,因此无论多长的串都能完整展开。
计算原理与变量说明
十六进制用 16 个符号表示 0 到 15,而 4 位二进制正好有 2⁴ = 16 种组合,两者一一对应,这就是「1 位十六进制 = 4 位二进制」的由来,这 4 位称为一个半字节(nibble)。完整的映射关系是固定的:0 → 0000、1 → 0001、2 → 0010、3 → 0011、4 → 0100、5 → 0101、6 → 0110、7 → 0111、8 → 1000、9 → 1001、A → 1010、B → 1011、C → 1100、D → 1101、E → 1110、F → 1111。
- 位数关系:n 位十六进制展开后是 4n 位二进制。1A3F 是 4 位(n = 4),展开即 16 位;ABC 是 3 位,展开是 12 位;123456789ABCDEF 是 15 位,展开是 60 位。
- 字节与半字节:1 字节 = 8 位 = 2 位十六进制。所以「按字节补齐」要补的是左侧的整字节空位:ABC 的 12 位要补 4 个 0 凑成 16 位 = 2 字节,得到 00001010 10111100。
- 为什么不先转十进制再转二进制:JavaScript 的 Number 只能精确表示到 2⁵³ − 1,约 9 × 10¹⁵,而 16 位十六进制最大约 1.8 × 10¹⁹,早已越界。如果先转成十进制数字再取二进制,末几位会因浮点精度丢失而出错。逢位映射不经过数值,位数再多也逐位准确。
- 有符号与无符号:同一个 32 位模式在不同解释下含义不同。80000000 作为无符号数是 2147483648,但作为有符号 int32,最高位为 1 表示负数,值为 −2147483648,这正是 int32 的溢出点。本页在输入为 8 位十六进制时会同时给出有符号解释。
还需要留意前导零:十六进制的 00FF 与 FF 数值相同,但位模式不同,前者是 16 位、后者是 8 位。本页保留你输入中每一位十六进制,因此前导零不会被吞掉,位宽信息得以保留。
完整示例(数值仅作演示)
以下示例均按「按字节补齐 + 每 4 位分组」的默认设置演示。
1A3F→ 4 位十六进制 → 16 位二进制,分组显示 0001 1010 0011 1111,字节对齐 2 字节 00011010 00111111。FF→ 2 位 → 8 位,1111 1111,即 1 字节 11111111,十进制 255。ABC→ 3 位 → 12 位,原始为 1010 1011 1100,补齐后 2 字节 00001010 10111100。0xDEADBEEF→ 去掉前缀 8 位 → 32 位,8 个半字节分组,字节对齐 4 字节。7→ 1 位 → 4 位,0111,补齐为 1 字节 00000111。8000→ 4 位 → 16 位,1000 0000 0000 0000。123456789ABCDEF→ 15 位 → 60 位,补齐为 8 字节。
以 1A3F 为例说明读法:展开后第一个半字节对应十六进制的 1,即 0001;第二个对应 A,即 1010;第三个对应 3,即 0011;第四个对应 F,即 1111。按字节看,前 8 位 00011010 是十六进制的 1A,后 8 位 00111111 是 3F,两个字节拼回去正好是原串。示例中的十六进制串均为演示数值,不代表任何具体设备的寄存器值。
常见十六进制片段对照表
下表由本页同一套逐位映射算法生成,覆盖 0 到 F 的单半字节、常见的 8 位与 16 位片段,以及 32 位的边界值。表格位于页面上方的工具区,「加载更多」可一次展开全部 27 行,「复制对照表」得到制表符文本,「导出 CSV」会带上 BOM 以便表格软件正确识别中文。
结果边界、舍入与适用说明
- 输入范围:1 到 16 位十六进制,也就是最多 64 位二进制。超过 16 位会给出超限提示,因为 64 位是常见机器字的宽度上限。
- 非法字符:输入里出现 0-9、a-f(含大写)以外的字符,例如 1G3F 里的 G,页面会指出是哪一个字符不合法。
- 空前缀:只写 0x 而不带数字,或只留下分隔符,去掉前缀与分隔符后为空,页面会提示至少填入一位。
- 输入是大小写不敏感的,A 与 a 得到相同结果;输出统一用小写十六进制回显原始串,二进制部分只有 0 与 1。
- 逐位映射只认整数位模式,不支持小数点、正负号或科学计数法;带这些符号的输入会被当作非法字符拦下。
- 十进制值用 BigInt 精确计算,64 位十六进制也不会丢精度;仅在「按 int32 有符号」这一格才做 32 位截断解释。
- 本页不省略前导零,也不做四舍五入——二进制位数由输入的十六进制位数唯一决定,没有任何舍入环节。
常见问题
为什么必须逐位映射,不能先转成十进制再转二进制?
因为 JavaScript 的数字类型只能精确表示到 2⁵³ − 1(约 9 × 10¹⁵),而 16 位十六进制的最大值约 1.8 × 10¹⁹,远超这个上限。先转十进制会丢失末几位,再转二进制就会出错。逐位查表不经过数值,任何长度都能准确展开。
同一个 80000000,为什么有时显示成负数?
32 位模式本身只有 0 和 1,正负取决于如何解释。按无符号看,80000000 等于 2147483648;按有符号 int32 看,最高位为 1 表示负数,值为 −2147483648。这正是 int32 的溢出点,本页在 8 位十六进制输入时会把两种解释都列出来。
1A3F 的字节对齐结果为什么是 00011010 00111111?
1A3F 展开成 16 位二进制是 0001 1010 0011 1111。每个字节是 8 位,从右往左每 8 位切一刀:低 8 位是 0011 1111(即十六进制 3F),高 8 位是 0001 1010(即十六进制 1A)。所以字节对齐后写成 00011010 00111111,两个字节合起来正好还原成 1A3F。
输入里可以有 0x 前缀和空格吗?
可以。0x 或 0X 前缀会被识别并去掉,空格、逗号、下划线都会先被清掉,再按剩下的字符逐位转换。所以 0x1A 3F、1A-3F 写成 1A 3F、或 0x1A_3F 都能得到同一结果。务必只用这些分隔符,出现别的符号会被判为非法字符。
前导零会被自动去掉吗?
不会。本页保留输入中的每一位,因此 00FF 显示为 16 位而不是 8 位,位宽信息不会丢。若只想要数值去掉前导零,可以先用相应工具做数值归一,再回到本页转二进制。
最长能转多长的十六进制?
本页上限是 16 位十六进制,即 64 位二进制、8 字节,覆盖常见的 8、16、32、64 位机器字。更长的位串在多数场景里没有实际意义,也会超出单一机器字的表达范围。
这个工具免费吗?
免费,无需注册即可使用。
输入的数据安全吗?
安全。计算在当前浏览器本地完成,不会上传输入内容。
相关工具
- 二进制转十六进制转换器:本页的反方向,把 0/1 串压回十六进制。
- 十进制转二进制转换器:从十进制整数直接取二进制。
- 十进制转十六进制转换器:数值到紧凑记法的一步转换。
- 十六进制转十进制转换器:把 hex 还原成日常十进制的数值大小。
- 二进制转十进制转换器:由位模式读出十进制数值。
- 编码解码:查看全部编码解码工具。