进制转换器

二进制、十进制、十六进制、八进制与 2–36 任意进制互转。超大整数不丢精度,循环小数用括号标出,支持 8–128 位补码,输错时指出第几个字符。

  • 在浏览器中处理
  • 数据不离开你的设备
  • 免费 · 无需注册
用下划线或空格对整数部分分组:十进制每组 3 位,其他进制每组 4 位。前缀用于二、八、十六进制;大小写影响 10 进制以上的字母。复制包含当前显示的完整文本及分组、前缀,横向滚动不会截短复制内容。
选择 8、16、32、64 或 128 位,增加二进制与十六进制补码结果。仅适用于整数;N 位接受 -2^(N-1) 到 2^N-1,位模式补齐至所选宽度。
先选择位宽,再把输入整数按该宽度的有符号位模式读取:最高位为 1 时读作负数。负数输入须在有符号范围内;正数模式不能超过所选位数。
选择 2 到 36 进制,结果随输入更新。支持与所选进制一致的 0b、0o、0x 前缀;选十进制时,也会按这些前缀识别进制。
整数与小数合计最多 20,000 位,整数精度不丢失。小数最多输出 64 位:括号标出循环节,省略号表示截断,没有四舍五入。状态行会说明输入错误及其字符位置。
十进制
二进制
十六进制
八进制
第五行默认 36 进制,可选 2 到 36 进制。选择后立即更新;其余四行固定显示十进制、二进制、十六进制和八进制。
显示计算过程
 
展开结果后的计算过程。非十进制输入可显示按权展开;除基取余的目标须不同于十进制及输入进制。过程只覆盖整数部分;按权展开最多 64 个有效输入数位,除基取余最多 64 个十进制数位。
阅读完整使用指南 进制转换完全指南:二进制、十六进制、八进制与十进制互转
示例、说明与常见问题 带实际输出的示例、与同类工具的差别,以及常见问题。

示例一:补码与 Java、JavaScript 的差别

-10 写成二进制,各语言的结果不同。JavaScript 的 (-10).toString(2) 返回 -1010,是「负号 + 绝对值」;Java 的 Integer.toBinaryString(-10) 返回 32 位补码 11111111111111111111111111110110。本工具两种都给:

  • 二进制行:-1010
  • 选 8 位补码:11110110(十六进制 F6),提示「无符号 246,有符号 -10」

8 位有符号数的范围是 -128 到 127,无符号是 0 到 255。补码行接受两者的并集;-129 会提示超出 8 位范围。

示例二:把 Modbus 寄存器读成负数

Modbus 协议规范里保持寄存器是 16 位字。很多温度变送器把带符号的读数按 16 位补码存放(以设备手册为准)。抓包看到寄存器值 FF38:选十六进制、补码选 16 位、勾选「按有符号数读取输入」,得到:

十进制 -200。手册若写「单位 0.1 ℃」,就是 -20.0 ℃。不勾选时同一个值读作 65336。

示例三:雪花 ID 到前端变了

数据库里的 BIGINT 主键(如雪花算法生成的 ID)超过 2^53 − 1 时,JavaScript 的 Number 存不下(MDN)。JSON.parse('{"id":1234567890123456789}').id 得到 1234567890123456800,后三位已经变了。本工具按 BigInt 逐位解析:

十六进制 112210F47DE98115,选 64 位补码可以看到完整的 64 位二进制。这也是很多后端把长整型 ID 序列化成字符串的原因。

示例四:0.1 为什么不精确

十进制 0.1 转二进制得到 0.0(0011),转十六进制得到 0.1(9),括号里的数字无限循环。JavaScript 的数字是 IEEE 754 双精度浮点数,只能存 0.1 的近似值,所以 0.1 + 0.2 不等于 0.3。分母能整除新进制某次幂的小数才会结束,例如 0.625 是二进制 0.101。

本工具用精确分数计算,不四舍五入;循环节超过 64 位时只显示前 64 位并加 …。

能粘贴什么

输入处理方式
1111_0000、1111 0000数字之间的下划线、空格、撇号忽略
1,234,567只在十进制里按千位分隔读取
0x1F、0o17、0b101前缀与输入进制一致时去掉;选十进制时按前缀判断进制
255、FF、-5全角字符按半角读取
#FF5733十六进制下读作 CSS 颜色值

其他字符会停止转换并指出位置,例如二进制下输入 1012,提示「第 4 个字符「2」不是 2 进制的数字(可用:0–1)」。

与常见在线工具的差别

2026-10-01 我们在 tool.lu 进制转换(cn.bing.com「进制转换」第一位)输入同样的内容。大整数 9007199254740993 结果正确,但以下输入没有报错、直接给了别的数:

输入tool.lu 结果本工具
十进制 1,00090001000
十进制全角 255-111255
二进制 10129提示第 4 个字符不是二进制数字
二进制 1111_0000464240
十六进制 0x1F-22531

小数 0.1 在 tool.lu 没有输出。

限制

  • 支持 2 到 36 进制,数字为 0–9 和 A–Z,与 Python int()、JavaScript toString() 的范围相同。不支持 58、62 进制和 Base64 字母表。
  • 每个数最多 20,000 位。
  • 0.0(0011) 里的括号只用于阅读,不能再粘贴回输入框。
  • 不显示浮点数的 IEEE 754 位布局(符号位、阶码、尾数)。
  • 补码只用于整数,位宽为 8、16、32、64、128 位。

处理文字而不是数字时,请用二进制翻译器或 ASCII 转换器;八进制权限位见 Chmod 权限计算器,子网掩码的二进制形式见 IP 子网计算器。

FAQ

二进制怎么转十进制?

按权展开:从右往左每一位的权是 1、2、4、8、16……,把是 1 的位的权加起来。11010110 = 128 + 64 + 16 + 4 + 2 = 214。展开工具下方的「显示计算过程」,可以看到当前数字的展开式,以及反方向的除基取余步骤。

为什么 0.1 转成二进制是 0.0(0011)?

0.1 等于 1/10,分母含因子 5,而二进制只能精确表示分母是 2 的幂的分数,所以 0.1 在二进制里无限循环。括号里是循环节,0.0(0011) 即 0.000110011…。

负数的补码怎么算?

输入负数(如 -10),在「补码」里选位宽。8 位得到 11110110(F6),32 位得到 FFFFFFF6。反过来,输入补码、选位宽并勾选「按有符号数读取输入」,F6 按 8 位读作 -10。

数字有长度限制吗?

每个数最多 20,000 位。范围内的整数用 BigInt 精确计算;小数部分在 64 位内既不结束也不循环时截断,并以 … 标出。

为什么别的转换器对大数给出的结果不一样?

很多转换器把数值存成 JavaScript 的 Number,它只能精确表示不超过 2^53 − 1(9,007,199,254,740,991)的整数,更大的数末几位会变。在这里输入 9007199254740993,十六进制结果是 20000000000001;用 Number 计算的工具给出 20000000000000。

输入的数字会发送或保存吗?

不会发送:换算在浏览器标签页里完成。工具只把设置(输入进制、其他进制、数位分组、前缀、小写、补码位宽、按有符号数读取、计算过程的目标进制)存进本浏览器的 localStorage,数字本身不保存。页面统计只记录工具名和动作:停止输入 1.5 秒后记一次 convert,点复制时记 copy,不含数字。