进制转换器

在 2 到 64 之间的任意进制间转换整数。一次性给出二进制、八进制、十进制、十六进制、36 进制、58 进制和 64 进制结果,基于 BigInt 支持任意精度。

在 2 到 64 之间的任意两种进制之间转换整数。 输入数值并选择它所使用的进制,各种常见表示会立即同步更新。转换基于 JavaScript BigInt 实现,远超 2^53 的大数也能保持完整精度。

理解位置计数法与进制

进制到底是什么

在位置计数法中,进制(基数)决定了每一位的权重。十进制里 237 表示 2×100 + 3×10 + 7×1;同样的数字串在十六进制中表示 2×256 + 3×16 + 7 = 567。转换过程中数值本身没有变化,改变的只是书写方式。

数字字母表

N 进制需要 N 个不同的符号。0-9 覆盖前十个,之后由字母接手:a 代表 10,b 代表 11,直到 z 代表 35。超过 36 进制后继续使用大写字母,最后是 +/,本工具正是采用这一顺序。36 进制及以下按惯例不区分大小写;36 以上大小写则代表不同符号。

各种进制的实际用途

  • 二进制直接对应硬件。寄存器内容、位掩码和权限标志用二进制最直观。
  • 八进制每三个比特一组,这正是 Unix 文件权限写作 755 的原因。
  • 十六进制每四个比特一组,一个十六进制位恰好对应半字节。内存地址、颜色值和哈希值都在用它。
  • 36 进制是在不区分大小写的系统(如 DNS 标签)中仍然可用的最紧凑进制。
  • 58 进制是 62 进制去掉容易看错的 0OIl。比特币地址和许多短链服务都在使用。
  • 64 进制把三个字节编码成四个可打印字符,是在纯文本通道中传输二进制数据的标准做法。

精度说明

JavaScript 原生数字在超过 2^53 后会丢失精度。本转换器全程使用 BigInt,因此 200 位的十进制数也能精确转换成二进制而不会被悄悄四舍五入。支持负数,负号会在各进制间保留。

开源说明:转换基于 JavaScript 原生 BigInt API 实现,未使用任何第三方数值库。

常见问题

为什么 58 进制少了几个字符?
58 进制刻意去掉了 0、O、I、l,因为它们在打印或手写时极易混淆。这让地址在人工抄写时更安全,比特币也因此采用了它。
这里的 64 进制和邮件附件用的 Base64 一样吗?
不一样。本工具把 64 进制当作单个整数的位置计数法。附件编码(RFC 4648)处理的是字节流,还会用「=」补齐。那种场景请使用 Base64 工具。
可以转换非常大的数吗?
可以。全部运算走 BigInt,几百位的数也能精确转换,不会像普通 JavaScript 数字那样在 2^53 处悄悄丢精度。
输入区分大小写吗?
36 进制及以下不区分:十六进制里 FF 和 ff 都表示 255。从 37 进制开始,大写和小写是不同符号,因此需要区分。
如何转换负数?
直接在前面加负号即可,符号会带到每一种输出进制中。补码表示是另一个概念,本工具不做补码处理。
数据会上传到服务器吗?
不会。转换完全在你的浏览器内完成,输入的数值不会离开本机。