使用方法
- 输入要转换的数字。
- 选择这个数字所用的进制,可选 2 到 36 进制或 Base62。
- 同时查看二进制、八进制、十进制、十六进制、Base36 和 Base62 的结果。
- 如需其他进制,把它设为自定义目标进制即可。
转换的是数值,不是字节
本工具转换的是数字的值。十进制的 255 在二进制中是 11111111,八进制是 377,十六进制是 ff,Base36 是 73。
Base16、Base2 这类字节编码做的是另一件事:它们编码的是文本或文件。文本 255 由三个字符组成,对应的字节用十六进制表示是 32 35 35,用二进制表示是 00110010 00110101 00110101。想求一个数的十六进制,请用本页;想求字符或文件的十六进制,请用字节编码工具。
位值制的原理
在任何进制中,每一位的权重都是进制数的若干次方,指数从最右边的 0 开始依次增加。十六进制 ff 等于 15 × 16 + 15 = 255,二进制 11111111 等于 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 255。超过 10 的进制用字母继续表示数字,在 Base36 中 a 代表 10,z 代表 35。Base62 还加入了另一种大小写的字母,因此在 Base62 中大写和小写字母代表不同的值。
一位十六进制数字正好对应 4 个二进制位,一位八进制数字对应 3 个二进制位。所以程序员常用十六进制和八进制来简写二进制:1111 1111 按组转换就是 ff。
超大数和负数
本工具使用任意精度整数(JavaScript BigInt),再长的数字也能保持精确。很多计算器和普通的 JavaScript 数值在超过 9007199254740991(2 的 53 次方减 1)后会丢失精度。例如 parseInt('ffffffffffffffff', 16) 返回 18446744073709552000,而正确的值是 18446744073709551615,即 64 位无符号整数的最大值。
负数转换时保留负号,所以 -255 的十六进制是 -ff。这不是内存中定长整数使用的补码形式。如果需要补码,先加上 2 的位宽次方:以 8 位为例,-1 + 256 = 255,即 ff。本工具只支持整数,不支持小数。所有计算都在浏览器中完成。
在代码中进行进制转换
// JavaScript
parseInt('ff', 16); // 255
(255).toString(2); // '11111111'
BigInt('0xffffffffffffffff').toString(10); // '18446744073709551615'
# Python
int('ff', 16) # 255
bin(255), oct(255), hex(255) # ('0b11111111', '0o377', '0xff')
常见问题
如何把二进制转换成十进制?
输入二进制数,选择 2 进制,然后查看十进制结果。手动计算时,把每个 1 所在位的权重相加即可:二进制 1010 等于 8 + 2 = 10。
如何把十进制转换成十六进制?
选择 10 进制并输入数字,查看十六进制结果即可。手动计算时,反复除以 16,再把余数倒序写出:255 除以 16 得 15 余 15,结果就是 ff。
数字的大小有限制吗?
没有固定上限。工具使用 BigInt 运算,几百位的数字也能精确转换,只是特别长的数字需要稍多一点时间。
为什么这里 255 的十六进制和 Base16 编码工具的结果不一样?
可以转换带小数的数字吗?
不可以,本工具只处理整数。像 0.1 这样的小数在其他进制中往往无法精确表示,因此不在支持范围内。