博客
简体中文

进制转换器 — 二进制、八进制、十进制、十六进制互转

2/8/10/16/36 进制及自定义进制互转,支持 BigInt、负数和 0x/0b/0o 前缀

在浏览器中处理 · 不上传任何内容

功能简介

同一个数,二进制是 11111111,十六进制是 ff,十进制是 255。内存地址、颜色代码、位掩码和 Unix 文件权限(八进制)都需要你在不同进制之间换算。在这里输入一个数,就能同时看到它的 2、8、10、16、36 进制以及你自选进制的写法。

使用方法

  1. 输入一个数。空格和 _ 会被当作数位分隔符忽略,所以 1111_0000 也可以。
  2. 选择输入进制。默认的“自动”会查找 0x、0b 或 0o 前缀,没有就按十进制处理。
  3. 从结果表中复制需要的值。自定义那一行可以填 2 到 36 之间的任意进制。
  4. 如果更喜欢 FF 而不是 ff,开启大写字母。

工作原理

  • 解析使用 BigInt。从左到右逐个读取字符,按 value = value × base + digit 累加,因此除了 20,000 个字符的输入上限外,没有大小限制。
  • 数位取自 0-9 和字母 a-z(不区分大小写),分别代表 0-9 和 10-35。这也是最高只能到 36 进制的原因。
  • 数位的值等于或大于进制时,会报告它的位置以及该进制允许的数字。二进制里的 2、八进制里的 9 都是错误。
  • 符号(- 或 +)只在最开头被识别,不能出现在前缀之后。
  • 位数是绝对值写成二进制后的长度;0 算作 1 位。

示例

输入 进制 二进制 十六进制 十进制
255 10 11111111 ff 255
0xff 自动 11111111 ff 255
-0b101 自动 -101 -5 -5
18446744073709551617 10 1 后面跟 63 个 0,再加 1 10000000000000001 18446744073709551617

2^64+1 用普通 JavaScript 数字表示时会丢掉最后一位,在这里则能精确得到十六进制的 10000000000000001。

补充说明

  • chmod 755 用的是八进制,内存地址和 #1e90ff 这样的颜色用的是十六进制,36 进制则常用来紧凑地书写短 ID。
  • 如果混入了不是数字的字符,比如十进制里的字母或一个汉字,错误提示会告诉你它在第几个位置。

常见问题

很大的数能精确转换吗?

能。普通的 JavaScript 数字只在 2^53 以内是精确的,而这个工具用任意精度整数(BigInt)计算,超过 2^64 的值也能一位不差地转换。输入最长 20,000 个字符。

负数怎么显示?

保留符号,只转换绝对值,所以 -255 的十六进制是 -ff。这不是补码的位模式;如果需要 8 位等固定宽度的补码,请自行换算结果。

可以输入 0x 或 0b 前缀吗?

输入进制为“自动”时,会识别 0x(十六进制)、0b(二进制)和 0o(八进制)前缀,没有前缀则按十进制处理。手动选择进制时,只接受与之对应的前缀;在 16 进制下,0b1 会被读成数字 0、b、1,而不是前缀。

小数可以转换吗?

只支持整数。小数点会被当作非法字符报告,并给出它的位置。

没找到想要的工具?