进制转换器
在二进制、八进制、十进制和十六进制之间实时转换数字,或在 2 到 36 之间任意两个进制之间转换。
在任意一个字段中输入,其余三个字段会实时更新。支持负数和任意大的整数。
自定义进制转换
在 2 到 36 之间任意两个进制之间转换。
工作原理
你输入的每个值都会被解析为 JavaScript 的 BigInt,这是浏览器内置的一种任意精度整数类型。解析过程逐位处理你的输入,将累计总数乘以进制基数并加上每一位的值;反向转换则反复除以目标进制并收集余数。大于 9 的数字使用字母表示,所以 36 进制会依次使用 0-9 再到 a-z。负数同样支持:解析前会先剥离开头的负号,最后再拼接回去。
BigInt 这部分是值得了解的细节。基于普通 JavaScript 数字构建的转换器,在处理超过 9,007,199,254,740,991(2^53 - 1)的数值时会悄悄发生错误,因为超过这个值浮点数就无法精确表示每一个整数了。把一个 16 位的十六进制值(比如 ffffffffffffffff)粘贴进这类工具,你会得到一个四舍五入后的错误答案,且没有任何警告。而这里的运算在任意长度下都是精确的:一个 100 位的十进制数也能正确转换为二进制,只是需要更多位数而已。
每个字段在你输入时都会针对自身进制进行校验,因此在八进制框中输入 9,或在十六进制框中输入 g,会显示错误提示而不是给出一个无意义的结果,其余三个字段会根据你编辑的那个字段实时更新。这一切都发生在你的标签页内:查看开发者工具的 Network 面板,你会看到页面在你输入时不会发出任何请求,因此你转换的数字永远不会离开你的电脑。