首页文本与开发 › 进制转换器

进制转换器

输入任意进制的数字,一次给出二进制、八进制、十进制、十六进制和自定义进制结果,支持超大整数。

可输入负号、0x / 0b 前缀以及空格和下划线分隔符,超过 36 进制的字符不支持。

进制是怎么回事

任何进制都是按位权展开:在 b 进制里,从右往左第 n 位的权重是 b 的 n 次方。十六进制的 FF 等于 15 乘 16 加 15,也就是 255;二进制的 11111111 同样是 255。之所以计算机领域偏爱二、八、十六进制,是因为它们之间的换算不需要做乘除:一位八进制正好对应三位二进制,一位十六进制正好对应四位二进制,人可以直接分组读写。一个字节是 8 位二进制,写成十六进制只要两个字符,范围是 00 到 FF,这就是内存地址、颜色值、哈希摘要都用十六进制表示的原因。

本工具的实现与使用要点

工具支持 2 到 36 之间的任意进制,数字符号按 0-9、a-z 顺序取用,因此 36 进制的一位最大是 z,代表 35。输入时不区分大小写,允许带负号,也允许写成 0x1F、0b1010、0o777 这类带前缀的形式,还会自动忽略空格、下划线和逗号分隔符,方便从代码里直接粘贴。36 进制常被用来把自增编号压缩成短字符串,例如短链接的后缀;62 进制会再加上大写字母,但那已超出标准写法的范围,本工具不提供。

大整数是这类工具最容易出错的地方。JavaScript 的普通数字是双精度浮点数,只能精确表示 9007199254740991 以内的整数,再大就会丢失末几位。本工具在浏览器支持时使用 BigInt 做任意精度运算,所以 64 位的雪花编号、长哈希串都能正确转换;在不支持的老浏览器上会退回普通数字并给出提示。需要注意这里只处理整数,小数的进制转换不在支持范围内,例如十进制的零点一在二进制中是无限循环的;负数按“负号加绝对值”表示,不是补码,查看补码需要先确定位宽。

常见问题

为什么最大只支持 36 进制?

因为通用写法只用 0-9 和 26 个字母共 36 个符号。再大的进制(如 Base62、Base64)需要区分大小写或额外符号,属于编码而不是进制表示。

能转换小数吗?

暂不支持。小数在不同进制间往往是无限循环的,例如十进制 0.1 在二进制中无法精确表示,需要先约定保留位数。

负数怎么显示?

按“负号 + 绝对值”输出,例如 -255 的十六进制是 -FF。这与内存中的二进制补码表示不同,补码需要先确定位宽。

很长的数字会算错吗?

不会。浏览器支持时使用 BigInt 做任意精度整数运算,几百位的数字也能精确转换,结果区会注明当前是否启用了 BigInt。