Menu

进制转换器

在二进制、八进制、十进制和十六进制之间转换数字。

作者 Nethanel Bar, Co-founder & CEO

最后更新

准备好真正学会编程了吗?

Coddy 让你在浏览器里编写真实代码来学习:互动课程、即时反馈,卡住时还有 AI 帮忙。

进制转换器是什么?

进制转换器把用一种数制(二进制、八进制、十进制或十六进制)写的数字,改写成其他任意一种数制。开发者在读位掩码、调试颜色代码、解析协议数据包里的标志位、操作硬件寄存器,以及在 CSS、汇编、密码学等各种场景中进行十六进制和十进制互转时,都会用到它。

在不同进制之间,数字本身并没有变,变的只是它的表示方式。十进制的 255 在十六进制里是 0xFF,在二进制里是 0b11111111,在八进制里是 0o377。它们是同一个值的四种不同写法。

现代工具应该能处理大数而不丢失精度。JavaScript 普通的 parseInt 会悄悄地对超过 2⁵³ 的数进行舍入,这会在处理 64 位寄存器值、ID 和时间戳时引发难以察觉的 bug。靠谱的转换器在底层使用 BigInt,这样一个 256 位的十六进制值来回转换也能分毫不差。

在进制转换中你会学到什么

  • 二进制使用 2 个数字(0、1),八进制使用 8 个,十进制使用 10 个,十六进制使用 16 个(0 至 9、a 至 f)。
  • 每一个二进制数字就是一个位(bit)。4 位 = 1 个十六进制数字。8 位 = 1 个字节 = 2 个十六进制数字。
  • 十六进制只是读二进制的一种紧凑方式。0xCAFE 的二进制是 1100 1010 1111 1110,十六进制看起来轻松多了。
  • 在标准 JavaScript 中,超过 2⁵³ 的数会丢失精度。处理大整数时请使用 BigInt(123n)。

如何一步步进行进制转换

  1. 选择输入的进制

    根据你手上的数字,选择二进制、八进制、十进制或十六进制。

  2. 输入数值

    十六进制可以输入 ff 或 0xff,二进制可以输入 1010 或 0b1010。转换器会自动去掉前缀。

  3. 同时查看所有进制

    同一个数字的四种表示会立即全部显示出来。点击任意一个即可复制。

  4. 打开数字分组,方便阅读

    二进制按 4 位分组(1100 1010 1111 1110),十六进制按 2 个字符分组(CA FE)。查看位字段和内存转储时很有用。

进制速查表

四种进制下的常用参考值。下面用到的语法可以参考 JavaScript 的 BigInt 和数字字面量语法。

十进制二进制八进制十六进制
0000
1111
81000108
10101012A
16100002010
321000004020
64100000010040
100110010014464
1281000000020080
25511111111377FF
256100000000400100
1024100000000002000400
655351111111111111111177777FFFF

可以动手试试的进制转换示例

RGB 颜色代码

十六进制
color: #ff8800;
十进制
color: rgb(255, 136, 0);

每两个十六进制数字是一个字节(0-255),对应一个颜色通道。ff = 255,88 = 136,00 = 0。

读取权限位掩码

十进制

5

二进制

0b101

逐位解读

第 0 位(读)为 1,第 2 位(执行)为 1,第 1 位(写)为 0。所以权限是“读 + 执行”。

Unix 文件模式(chmod)、功能开关和协议数据包,都会把多个布尔值编码成同一个整数里的不同位。二进制视图让这一点一目了然。

BigInt 精确转换

十六进制(超大数)

0xFFFFFFFFFFFFFFFF

十进制

18446744073709551615

这是 64 位无符号整数的最大值。JavaScript 普通的 parseInt 会丢失精度,而 BigInt 能准确处理。

进制转换的常见错误

  • 把数值和字面量搞混。0x10 和 10 看起来很像,但分别是 16 和 10,所以在代码里一定要加上进制前缀。
  • 从左到右读十六进制内存转储时,忘了考虑字节序(大端和小端)。
  • 在 JavaScript 中对大于 2⁵³ 的值使用 parseInt(big, 16)。应该改用 BigInt('0x' + hex)。
  • 字节补零补错了。0xF 写成一个字节是 0x0F,不是 0xF0;对固定宽度的字段来说,前导零很重要。
  • 混淆有符号和无符号的解读。十六进制 0xFFFF_FFFF 按无符号解读是 4294967295,按有符号(补码)解读是 -1。

进制转换器常见问题

二进制怎么转十进制?
从右边开始,把每一位二进制数字乘以对应的 2 的幂。以 1010 为例:1·8 + 0·4 + 1·2 + 0·1 = 10。也可以直接粘贴到进制转换器里,立刻得到答案。
十进制怎么转十六进制?
反复把十进制数除以 16,记下每次的余数(0 至 15,其中 10 至 15 写作 A 至 F),然后从下往上读余数。255 ÷ 16 = 15 remainder 15 → FF。
十六进制有什么用?
凡是需要一种紧凑、易读的二进制表示的地方都会用到十六进制:颜色代码(#ff8800)、内存地址、文件转储、MAC 地址、哈希值,以及大多数底层系统。
八进制和十六进制有什么区别?
八进制以 8 为基数(数字 0 至 7);十六进制以 16 为基数(数字 0 至 9、A 至 F)。八进制如今已经很少见,但仍然出现在 Unix 文件权限(0755)和一些 C 系语言的数字字面量中。
二进制数为什么增长得这么快?

每多一位,能表示的值的数量就翻一倍。8 位能表示 256 个值,16 位能表示 65,536 个,32 位能表示超过 40 亿个。这就是位掩码能在一个很小的数字里装下很多信息的原因。

了解更多

其他开发者工具

Coddy 编程语言插图

和 Coddy 一起学编程

开始