Appearance
为什么会使用十六进制?它比二进制、十进制好在哪里?
更新: 7/30/2026 字数: 0 字 时长: 0 分钟
你可能没写过底层代码,但大概率见过这样的东西:
css
color: #FF6600;
background-color: #FFFFFF;网页颜色码里的 #FF6600,就是一个典型的十六进制写法。
如果把它拆开看:
text
#FF6600 = 红色 FF,绿色 66,蓝色 00其中:
FF表示红色强度很高;66表示绿色有一定强度;00表示蓝色没有强度。
为什么不用我们更熟悉的十进制?为什么计算机底层明明是二进制,却又经常出现十六进制?答案很简单:
二进制适合机器,十进制适合人类日常,十六进制适合人类阅读和书写机器数据。

一、三种数制的基本对应关系
1. 十进制:我们最熟悉的计数方式
十进制使用 10 个符号:
text
0 1 2 3 4 5 6 7 8 9逢十进一。
比如:
text
9 后面是 10
99 后面是 100它非常适合日常生活:
- 价格:99 元;
- 年龄:18 岁;
- 距离:100 公里;
- 数量:30 个。
十进制的优势是符合人类习惯,但它并不是计算机硬件最自然的表达方式。
2. 二进制:计算机最自然的语言
二进制只使用 2 个符号:
text
0 1逢二进一。
它看起来比较反人类,但对计算机非常自然,因为硬件中很多状态都可以抽象成两种:
text
低电平 / 高电平
关 / 开
假 / 真
0 / 1例如十进制的 13,用二进制表示是:
text
13 = 1101二进制适合机器处理,但有一个明显问题:
写起来太长,读起来太累。
比如十进制的 255,二进制是:
text
11111111如果是更大的数据,就会变成一长串 0 和 1,人很容易看错、数错。
3. 十六进制:更短、更适合看机器数据
十六进制使用 16 个符号:
text
0 1 2 3 4 5 6 7 8 9 A B C D E F其中:
text
A = 10
B = 11
C = 12
D = 13
E = 14
F = 15也就是:
text
十进制 15 = 十六进制 F
十进制 16 = 十六进制 10它的关键优势在于:
1 个十六进制位,刚好可以表示 4 个二进制位。
对应关系如下:
text
二进制 0000 = 十六进制 0
二进制 0001 = 十六进制 1
二进制 0010 = 十六进制 2
二进制 0011 = 十六进制 3
二进制 0100 = 十六进制 4
二进制 0101 = 十六进制 5
二进制 0110 = 十六进制 6
二进制 0111 = 十六进制 7
二进制 1000 = 十六进制 8
二进制 1001 = 十六进制 9
二进制 1010 = 十六进制 A
二进制 1011 = 十六进制 B
二进制 1100 = 十六进制 C
二进制 1101 = 十六进制 D
二进制 1110 = 十六进制 E
二进制 1111 = 十六进制 F所以:
text
二进制:1111 1111
十六进制:FF
十进制:255同一个数,十六进制比二进制短很多,同时又能非常容易地和二进制对应起来。
二、十六进制的对比优势
1. 比二进制短得多
看一个 8 位二进制数:
text
11111111如果写成十六进制:
text
FF长度从 8 位变成 2 位。
再看一个 32 位二进制数:
text
11011110101011011011111011101111如果按 4 位一组切开:
text
1101 1110 1010 1101 1011 1110 1110 1111再转成十六进制:
text
DEADBEEF一下就短了很多,也更方便阅读、复制和检查。
这就是为什么你经常在程序、调试器、内存地址里看到类似:
text
0x7FFE
0xFF
0xDEADBEEF这里的 0x 通常表示“后面是十六进制”。
2. 比十进制更贴近二进制
十进制虽然人类熟悉,但它和二进制之间没有那么整齐的分组关系。
比如:
text
255你看到十进制 255,不一定能马上知道它的二进制是:
text
11111111但看到十六进制:
text
FF如果你知道:
text
F = 1111那么:
text
FF = 1111 1111这就很直观。
所以十六进制的定位不是取代十进制,而是:
当我们需要阅读计算机内部数据时,十六进制比十进制更顺手。
3. 天然适合表示字节
计算机里很常见的单位是 字节 byte。
一个字节等于 8 个二进制位:
text
1 byte = 8 bits而:
text
1 个十六进制位 = 4 bits所以:
text
1 byte = 2 个十六进制位这就非常整齐。
例如一个字节的最大值:
text
二进制:11111111
十进制:255
十六进制:FF所以在查看文件内容、网络数据包、颜色值、编码数据时,十六进制非常常见。
三、十六进制的典型适用场景
场景 1:网页颜色码
网页颜色常见写法是:
text
#RRGGBB其中:
RR表示红色;GG表示绿色;BB表示蓝色。
每一组都是 2 位十六进制,也就是 1 个字节,范围是:
text
00 到 FF换成十进制就是:
text
0 到 255例如:
text
#000000 = 黑色
#FFFFFF = 白色
#FF0000 = 红色
#00FF00 = 绿色
#0000FF = 蓝色
#FF6600 = 橙色为什么颜色码适合用十六进制?
因为每个颜色通道正好是 1 个字节,而 1 个字节正好可以用 2 位十六进制表示。
text
红色 255 = FF
绿色 102 = 66
蓝色 0 = 00
所以:
RGB(255, 102, 0) = #FF6600场景 2:内存地址
程序运行时,数据会放在内存里。内存中的位置通常用地址表示。
如果用二进制写地址,会非常长:
text
01111111111111100010101000010000但用十六进制就短得多:
text
0x7FFE2A10这对开发者很重要,因为调试程序时,经常需要看:
- 某个变量在哪里;
- 某段内存是否被改动;
- 指针指向什么位置;
- 崩溃日志中的地址信息。
十六进制的好处是:
- 比二进制短;
- 比十进制更容易和字节、位模式对应;
- 更适合调试器和日志展示。
场景 3:文件内容查看
如果你用十六进制查看器打开一个文件,可能会看到类似:
text
89 50 4E 47 0D 0A 1A 0A这类内容叫做文件的“字节数据”。
为什么不用普通文本显示?
因为文件底层不一定都是可见字符。图片、压缩包、音频、视频、可执行文件,很多内容直接显示出来会是乱码。
十六进制查看器的作用是:
把文件中的每个字节,用两位十六进制稳定地显示出来。
这样开发者就能检查:
- 文件头是否正确;
- 编码是否异常;
- 数据是否损坏;
- 协议字段是否符合预期。
场景 4:网络数据包
网络通信本质上也是一串字节。
例如一段数据包可能被显示成:
text
45 00 00 3C 1C 46 40 00用十六进制展示网络数据,有几个好处:
- 每两个十六进制字符对应一个字节;
- 字段边界更清楚;
- 便于和协议文档对照;
- 比二进制更容易人工阅读。
比如协议文档里说某字段占 1 字节,那你看到:
text
3C就知道这正好是一个字节,而不是一长串 00111100。
场景 5:机器码、编码与底层调试
在底层开发、嵌入式、驱动、编译器、逆向分析、硬件调试里,十六进制也非常常见。
例如:
text
0x00
0x7F
0x80
0xFF这些值在底层语境里非常直观:
0x00:所有位都是 0;0xFF:一个字节的所有位都是 1;0x7F:二进制最高位是 0,后面都是 1;0x80:二进制最高位是 1,后面都是 0。
如果换成十进制:
text
0
127
128
255虽然也正确,但不如十六进制容易看出每一位的结构。
四、什么时候不用十六进制?
十六进制很有用,但不是所有场景都适合它。
日常计算:用十进制
比如:
- 工资;
- 价格;
- 成绩;
- 日期;
- 距离;
- 统计数据。
这些场景用十进制最自然,因为人类已经习惯了。
你不会说:
text
这件商品售价 0x63 元虽然 0x63 等于十进制 99,但这会让人很困惑。
机器电路和逻辑:用二进制
如果你关心的是每一位到底是 0 还是 1,比如:
- 位运算;
- 开关状态;
- 权限标志;
- 硬件寄存器;
- 布尔逻辑。
二进制更直观。
例如:
text
权限标志:1011可以理解为:
text
第 1 位:开
第 2 位:开
第 3 位:关
第 4 位:开这种情况下,二进制能直接展示每个位的状态。
机器数据阅读:用十六进制
如果你面对的是一段机器数据,比如:
- 内存;
- 字节流;
- 文件头;
- 颜色码;
- 网络包;
- 编码数据。
十六进制通常最合适。
它不像二进制那样冗长,也不像十进制那样和字节边界不够整齐。
五、一个简单类比
可以把三种数制想象成三种语言:
text
二进制:机器的母语
十进制:人类日常语言
十六进制:程序员查看机器数据时的速记法十六进制存在的意义,不是因为它“更高级”,而是因为它刚好卡在一个很舒服的位置:
- 能和二进制整齐对应;
- 写起来比二进制短;
- 看机器数据比十进制清楚;
- 又没有复杂到难以学习。
六、三种数制适用场景对比表

| 数制 | 使用符号 | 核心特点 | 更适合谁 | 典型场景 | 举例 |
|---|---|---|---|---|---|
| 二进制 | 0、1 | 最贴近计算机硬件状态 | 机器、硬件、底层逻辑 | 位运算、开关状态、权限标志、寄存器 | 11111111 |
| 十进制 | 0–9 | 最符合人类日常习惯 | 普通用户、业务计算 | 金额、数量、年龄、统计数据 | 255 |
| 十六进制 | 0–9、A–F | 1 位对应 4 个二进制位,短且整齐 | 程序员、调试者、数码爱好者 | 颜色码、内存地址、文件字节、网络包 | FF |
总结一句话:
看机器内部,二进制最原始;给人日常使用,十进制最自然;在二者之间做阅读和调试,十六进制最顺手。