进制转换:开发者实用指南
当你看到 CSS 颜色代码 #FF6B6B 时,是否想过那些字母代表什么?或者在调试网络数据包时,看到满屏的 0x 前缀却不知从何下手?这些场景背后都涉及同一个知识点——进制转换(数制转换)。本文将用具体例子,带你搞清楚二进制、八进制、十进制和十六进制之间的关系。
为什么计算机需要不同进制?
人类用十进制(Base 10)计数,原因很简单:我们有十根手指。计算机使用二进制(Base 2),因为晶体管只有两种状态:通(1)和断(0)。十六进制(Base 16,即"十六进制"或"16进制")则是二进制的压缩版——4位二进制可以用1位十六进制表示,大幅缩短了数据的书写长度。八进制(Base 8)在早期 Unix 系统中广泛使用,至今仍出现在文件权限中。
掌握进制转换,你将能够:
- 读写内存地址和寄存器值
- 调试网络协议和数据包
- 理解 CSS 颜色值的构成
- 读懂 Unix/Linux 的文件权限
- 解析二进制文件格式和字符编码
核心示例:十进制 42
以数字 42 为例,看它在不同进制下的表示方式:
二进制(101010): 每位代表 2 的幂次。从右到左:2¹ + 2³ + 2⁵ = 2 + 8 + 32 = 42。
八进制(52): 每位代表 8 的幂次。5×8 + 2×1 = 42。
十六进制(2A): 每位代表 16 的幂次。2×16 + 10×1 = 42。字母 A 代表十进制的 10。
手动转换方法
十进制转二进制
连续除以 2,记录余数,从下往上读:
42 ÷ 2 = 21 余 0
21 ÷ 2 = 10 余 1
10 ÷ 2 = 5 余 0
5 ÷ 2 = 2 余 1
2 ÷ 2 = 1 余 0
1 ÷ 2 = 0 余 1
从下往上读余数:101010
十进制转十六进制
连续除以 16,余数对应十六进制字符(10=A,11=B ... 15=F):
42 ÷ 16 = 2 余 10(即 A)
2 ÷ 16 = 0 余 2
从下往上读:2A
二进制转十六进制(快捷方法)
将二进制从右向左每 4 位一组,逐组转换:
101010 → 0010 1010
2 A
结果:2A。这正是十六进制在程序员中流行的原因——它能高效压缩二进制数据。
实战示例一:十六进制表示 IP 地址
网络工程师在抓包分析时,经常看到十六进制格式的 IP 地址。IPv4 地址 192.168.1.1 的十六进制表示如下:
192 → C0
168 → A8
1 → 01
1 → 01
十六进制表示:C0A8 0101
这正是 IP 地址在原始数据包和 Wireshark 等网络分析工具中显示的格式。理解这一点,对排查网络故障非常有帮助。
实战示例二:CSS 颜色代码
颜色 #FF6B6B 是一个十六进制三元组,每两位代表一个颜色通道(范围 0–255):
FF → 255(红色 Red)
6B → 107(绿色 Green)
6B → 107(蓝色 Blue)
所以 #FF6B6B 对应 RGB(255, 107, 107),是一种珊瑚红。设计师说"红色通道拉满"就是 FF,"没有蓝色分量"就是 00。十六进制颜色代码本质上就是三个十六进制数连写在一起。
6B 转十进制:6×16 + 11 = 107。
八进制与文件权限
Unix 文件权限如 chmod 755 直接使用八进制:
7 = 111(二进制)→ 读 + 写 + 执行
5 = 101(二进制)→ 读 + 执行(无写入权限)
5 = 101(二进制)→ 读 + 执行(无写入权限)
755 表示:文件所有者拥有全部权限,用户组和其他人只能读取和执行。八进制恰好与三位一组的权限位完美对齐,这不是巧合。
用在线工具快速换算
手动计算适合学习,日常使用中在线工具更高效。推荐使用 FileCrank 的免费工具:
- 进制转换器 — 同时在二进制、八进制、十进制、十六进制之间互转
- 十六进制转换器 — 十六进制与十进制、文本互转
- 二进制转换器 — 二进制与文本、十进制互转
- ASCII 转换器 — 字符编码与十进制、十六进制对照
输入 2A,工具会立刻显示:十进制 42、八进制 52、二进制 101010。
常用数值快速对照表
注意:255 的十六进制是 FF,这是单个字节的最大值。因此颜色从 #000000(黑色)到 #FFFFFF(白色)。
小结
进制转换是计算机科学中最基础的技能之一,在调试、读文档、理解数据存储与传输时都会用到。二进制是机器的语言,十六进制是工程师的速记,十进制是人类的习惯。
一旦理解了这些不同进制只是同一个数字的不同写法,在它们之间切换就会变得非常自然。试试 FileCrank 进制转换器,用你自己的数字练习一下吧。