进制转换器 — 二进制、八进制、十进制、十六进制互转
2/8/10/16/36 进制及自定义进制互转,支持 BigInt、负数和 0x/0b/0o 前缀
在浏览器中处理 · 不上传任何内容
功能简介
同一个数,二进制是 11111111,十六进制是 ff,十进制是 255。内存地址、颜色代码、位掩码和 Unix 文件权限(八进制)都需要你在不同进制之间换算。在这里输入一个数,就能同时看到它的 2、8、10、16、36 进制以及你自选进制的写法。
使用方法
- 输入一个数。空格和
_会被当作数位分隔符忽略,所以1111_0000也可以。 - 选择输入进制。默认的“自动”会查找
0x、0b或0o前缀,没有就按十进制处理。 - 从结果表中复制需要的值。自定义那一行可以填 2 到 36 之间的任意进制。
- 如果更喜欢
FF而不是ff,开启大写字母。
工作原理
- 解析使用
BigInt。从左到右逐个读取字符,按value = value × base + digit累加,因此除了 20,000 个字符的输入上限外,没有大小限制。 - 数位取自 0-9 和字母 a-z(不区分大小写),分别代表 0-9 和 10-35。这也是最高只能到 36 进制的原因。
- 数位的值等于或大于进制时,会报告它的位置以及该进制允许的数字。二进制里的
2、八进制里的9都是错误。 - 符号(
-或+)只在最开头被识别,不能出现在前缀之后。 - 位数是绝对值写成二进制后的长度;0 算作 1 位。
示例
| 输入 | 进制 | 二进制 | 十六进制 | 十进制 |
|---|---|---|---|---|
255 |
10 | 11111111 | ff | 255 |
0xff |
自动 | 11111111 | ff | 255 |
-0b101 |
自动 | -101 | -5 | -5 |
18446744073709551617 |
10 | 1 后面跟 63 个 0,再加 1 | 10000000000000001 | 18446744073709551617 |
2^64+1 用普通 JavaScript 数字表示时会丢掉最后一位,在这里则能精确得到十六进制的 10000000000000001。
补充说明
chmod 755用的是八进制,内存地址和#1e90ff这样的颜色用的是十六进制,36 进制则常用来紧凑地书写短 ID。- 如果混入了不是数字的字符,比如十进制里的字母或一个汉字,错误提示会告诉你它在第几个位置。
常见问题
很大的数能精确转换吗?
能。普通的 JavaScript 数字只在 2^53 以内是精确的,而这个工具用任意精度整数(BigInt)计算,超过 2^64 的值也能一位不差地转换。输入最长 20,000 个字符。
负数怎么显示?
保留符号,只转换绝对值,所以 -255 的十六进制是 -ff。这不是补码的位模式;如果需要 8 位等固定宽度的补码,请自行换算结果。
可以输入 0x 或 0b 前缀吗?
输入进制为“自动”时,会识别 0x(十六进制)、0b(二进制)和 0o(八进制)前缀,没有前缀则按十进制处理。手动选择进制时,只接受与之对应的前缀;在 16 进制下,0b1 会被读成数字 0、b、1,而不是前缀。
小数可以转换吗?
只支持整数。小数点会被当作非法字符报告,并给出它的位置。