进制转换器
二进制、十进制、十六进制、八进制与 2–36 任意进制互转。超大整数不丢精度,循环小数用括号标出,支持 8–128 位补码,输错时指出第几个字符。
- 在浏览器中处理
- 数据不离开你的设备
- 免费 · 无需注册
用微信扫描以下二维码即可分享
示例、说明与常见问题 带实际输出的示例、与同类工具的差别,以及常见问题。
示例一:补码与 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,000 | 9000 | 1000 |
十进制全角 255 | -111 | 255 |
二进制 1012 | 9 | 提示第 4 个字符不是二进制数字 |
二进制 1111_0000 | 464 | 240 |
十六进制 0x1F | -225 | 31 |
小数 0.1 在 tool.lu 没有输出。
限制
- 支持 2 到 36 进制,数字为 0–9 和 A–Z,与 Python
int()、JavaScripttoString()的范围相同。不支持 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,不含数字。