工具
指南

进制转换器

转换

使用 BigInt 在 2–62 进制之间互转,超大整数也不损失精度。

100% 客户端 无后端
→
输出
十进制
本页内容

什么是进制转换?#

每一个整数都是同一个数,只是”拼写”随进制而变。十进制的 255、十六进制的 ff、二进制的 11111111、八进制的 377——这四个字符串表示的是同一个量。进制转换就是把一种拼写翻成另一种。它之所以值得做成一个正经工具、而不是随手 parseInt,是因为 JavaScript 的 Number 在 2^53(约 16 位十进制)之后会悄悄丢精度,于是把 18446744073709551616 这样的 64 位标识符丢进普通 Number,拿回来的会是另一个数,而且没有任何提示。

本页全程基于 BigInt,所以任意大的整数在每次转换中都保持完整精度。支持 2 到 62 进制,使用规范的数字字母表:0-9 之后是 a-z,再之后是 A-Z。为方便起见,2 到 36 进制大小写不敏感(你可以把十六进制的 255 写成 FF);而 37 到 62 进制大小写敏感——因为在 62 进制里,小写 a 和大写 A 是两个真正不同的数字(分别是 10 和 36)。

怎么用#

  1. 在 Value 里输入要转换的值,默认是 255。
  2. 把 From 设为该值当前的进制(下拉框提供 2 到 62,默认 10,即十进制)。
  3. 把 To 设为你想要的目标进制(默认 16,即十六进制)。中间的箭头只是视觉提示。
  4. Output 框实时显示转换后的拼写,下方的 Decimal 行则给出该值的十进制写法——在两个都不熟的进制之间换算时,这是个很方便的校对。
  5. Sample 重载默认值,Clear 清空。如果某位数字在所选进制里非法,状态行会报错(在 8 进制里输入 8、或在 16 进制里输入 g,都不会悄悄给出错误结果)。

核心特性#

  • BigInt 精度。 转换在任意精度整数上进行,所以 2^64 甚至更大的数都能精确往返,没有 2^53 的悬崖,也没有浮点近似。
  • 2 到 62 进制全覆盖。 涵盖二进制、八进制、十进制、十六进制、base32、base36、类 base58 字母表以及完整的 base62——现实系统真正会用到的范围。
  • 大小写敏感的解析。 2–36 进制为方便起见接受任意大小写;37–62 进制把大小写视为有意义的区别,使 a 与 A 保持为不同数字,与规范的 62 符号字母表一致。
  • 容忍下划线分组。 你可以粘贴 1_000,它会被读成 1000——和很多编程语言里的可读性约定一致。
  • 支持负号。 负数能正确转换,减号在每种进制下都保留。

实例演示#

用默认的 255,From 10、To 16,面板显示:

Output:   ff
Decimal:  255

把 To 切到 2,得到 11111111——正好 8 位,恰好放进一个字节,这也是 ff 在颜色码和字节转储里如此眼熟的原因。

BigInt 的价值在一个 64 位数上才会显出来。输入 18446744073709551616(即 2^64),From 10、To 16:

Output:   10000000000000000
Decimal:  18446744073709551616

也就是 1 后面跟 16 个零——正是 2^64 的十六进制写法。一个建在 JavaScript Number 上的转换器会先把输入四舍五入成 18446744073709552000,你根本不会察觉。再把它 From 16 / To 10 往回转,原来的十进制原样回来——这就是”没有丢精度”的证明。

常见问题#

为什么 FF 在十六进制里能用,在 62 进制里不行?#

2 到 36 进制共用同一组字母(a–z,映射到 10–35),所以大小写无所谓,FF = ff = 255。从 37 进制开始,字母表需要的字母超过 26 个,于是扩展到大写:a=10、b=11……z=35,A=36、B=37……Z=61。一旦大小写都用上了,a 和 A 就是不同数字,解析时必须保留大小写。

如果我输入的数字在该进制里非法,会怎样?#

会得到清晰的报错,而不是错误答案。在 From 为 8(八进制)时输入 8 或 9,或在 From 为 16(十六进制)时输入 g,都会被拒绝,因为这些字符在该进制里不是合法数字。状态行会指出出错的字符。

我明明在转到别的进制,为什么还要显示 Decimal 行?#

因为十进制是人类思考用的进制,是最自然的校对基准。当你把 base-58 的 q 转成 base-16 看到 1a 时,Decimal 行(26)让你确认”是的,第 58 个符号确实表示二十六”,而不用自己手算。

支持像 3.14 这样的带小数的数吗?#

不支持——本转换器只处理整数。小数部分的进制转换是另一个问题(在大多数进制里会产生无限循环展开,就像十进制里的 1/3),悄悄截断反而会误导人。对于任意大小的整数,转换是精确且瞬时的。