piapia123
zh

进制转换(2 / 8 / 10 / 16 / 36)

转换计算

所有处理都在浏览器本地完成,数据不上传服务器

输入
输出

把一个数在二、八、十、十六、36 进制之间互转,五种进制的结果一次全部列出,省得来回切换。输入支持 0x、0o、0b 前缀自动识别,下划线和空格可以当分隔符直接粘。底层用 BigInt 而不是普通数字 —— 普通数字超过 2 的 53 次方就会丢掉尾数,转一个雪花算法 ID 会得到看着正常、其实已经错了的结果,而且不会报任何错。

功能

  • 2、8、10、16、36 进制结果一次全部显示
  • 输入前缀自动识别:0x 十六进制、0o 八进制、0b 二进制
  • 任意长度整数都精确,19 位雪花 ID、订单号也能一位不差
  • 顺带给出二进制位数,以及是否落在 64 位有符号整数范围内
  • 下划线、空格分隔符可直接粘贴,不用先手工清理
  • 输入前缀与所选进制冲突时直接报错,不会默默选一个
  • 小数会明确拒绝(0.1 在二进制里是无限循环小数,没有精确答案)

使用方法

  1. 把数字粘进输入框,带 0x / 0o / 0b 前缀会自动识别
  2. 需要时手动指定输入进制,并选择是否加前缀、是否大写
  3. 五种进制的结果同时出现
  4. 点「复制」取走结果

常见问题

为什么大整数要特殊处理?
JavaScript 的普通数字是双精度浮点,超过 2 的 53 次方之后相邻整数就无法区分了:1234567890123456789 会被静默变成 1234567890123456800。而这个量级恰好就是雪花 ID 与自增主键的常见位数,所以本工具全程使用 BigInt,不做任何浮点运算。
为什么 36 进制的结果没有前缀?
0x、0o、0b 是 JavaScript 自己定义的三种写法,36 进制没有通用前缀 —— 随便造一个会让结果粘回代码里无法解析,反而不如不加。
支持小数吗?
不支持,而且这不是偷懒:十进制的 0.1 在二进制里是无限循环小数,任何有限位数的输出都是近似值。真实的进制转换需求绝大多数针对整数,所以这里只做整数并明确拒绝小数。
「需要无符号 64 位」是什么意思?
该数超过了 2^63-1,超出了有符号 64 位整数的表示范围。数据库的 BIGINT 分有符号与无符号两种,写库前需要先确认列的类型,否则会溢出报错或被截断。

相关工具