十六进制编码详解:文本如何变成 Hex
十六进制(Hexadecimal)是程序员日常工作中频繁接触的数字表示方式。从颜色代码 #FF5733 到内存地址 0x7FFF,从网络数据包到文件魔数,十六进制无处不在。这篇指南将带你理解十六进制的原理,以及文本如何转换为十六进制表示。
什么是十六进制?
十六进制是一种基数为 16 的数制系统,使用 16 个符号来表示数值:0-9 和 A-F(或 a-f)。其中 A 表示 10,B 表示 11,以此类推,F 表示 15。
为什么是 16?因为 16 是 2 的 4 次方,这意味着一个十六进制数字恰好可以表示 4 个二进制位(比特)。一个字节(8 比特)正好用两个十六进制数字表示。这种与二进制的天然对齐关系,使十六进制成为表示二进制数据的人类可读形式。
十六进制与其他进制的对照:
| 十进制 | 二进制 | 十六进制 |
|---|---|---|
| 10 | 00001010 | 0A |
| 16 | 00010000 | 10 |
| 255 | 11111111 | FF |
| 256 | 000100000000 | 100 |
注意:十六进制的 10 等于十进制的 16,FF 等于十进制的 255——一个字节能表示的最大值。
文本转十六进制的原理
文本转十六进制的过程分为两步:先将每个字符映射为数字编码,再将数字编码转换为十六进制表示。
第一步:字符到码点
计算机使用字符编码标准为每个字符分配唯一的数字编号(码点)。最基础的标准是 ASCII:
A→ 65a→ 970→ 48!→ 33- 空格 → 32
ASCII 覆盖了 128 个字符,对英语足够,但无法表示中文、日文等。Unicode 扩展了编码空间,可以表示超过一百万个字符:
中→ 20013(U+4E2D)🎉→ 128515(U+1F389)
第二步:码点到十六进制
将码点转换为十六进制表示:
A→ 65 →41a→ 97 →61中→ 20013 →4E2D
在 UTF-8 编码下,一个中文字符占 3 个字节,因此”中”的完整十六进制表示是 E4 B8 AD(UTF-8 编码的字节序列),而不仅仅是码点 4E2D。
完整示例
以文本 “Hi” 为例:
H→ ASCII 码 72 → 十六进制48i→ ASCII 码 105 → 十六进制69
所以 “Hi” 的十六进制表示为 48 69(字节之间通常用空格分隔以便阅读)。
十六进制的实际用途
调试与排错
当程序出现编码问题、乱码或数据损坏时,查看原始数据的十六进制表示是最直接的排查手段。你可以精确看到每个字节的值,发现不可见字符、错误的编码标记或截断的数据。
颜色代码
CSS 和设计工具中的颜色值就是十六进制的典型应用。#FF5733 表示红色通道 FF(255)、绿色通道 57(87)、蓝色通道 33(51)。理解十六进制让你能直接读懂颜色值,而不必依赖取色器。
网络协议
网络数据包的抓包分析中,数据以十六进制显示。HTTP 请求头、TCP 标志位、IP 地址——都以十六进制呈现。例如,TCP 头部中的标志位 0x18 表示 PSH+ACK。
文件格式识别
文件的开头几个字节(魔数)标识了文件类型。JPEG 文件以 FF D8 FF 开头,PNG 文件以 89 50 4E 47 开头。通过检查文件的十六进制头部,可以判断文件的真实类型,即使扩展名被篡改。
内存地址与逆向工程
在底层编程和逆向工程中,内存地址和数据都以十六进制表示。0x7FFF5FBFFD8 比 140734799798360 更容易阅读和记忆。
使用 TextKit 的十六进制转换器
TextKit 提供免费的 十六进制转换器,支持双向转换:
- 文本转十六进制:输入文本,即时获得每个字符的十六进制表示
- 十六进制转文本:粘贴十六进制字符串,解码回可读文本
- 支持多种分隔符格式(空格、无分隔符、0x 前缀)
- 一键复制结果
所有转换在浏览器中完成,数据不离开你的设备。
十六进制使用技巧
- 注意编码:同一个字符在不同编码下有不同的十六进制表示。转换前确认使用的是 UTF-8 还是其他编码。
- 字节对齐:十六进制表示应按字节对齐。如果位数不是偶数,前面补零——
A应写成0A而不是A。 - 区分大小写:十六进制中
A和a等价,但保持大小写一致是好习惯。通常使用大写。 - 前缀约定:编程中常用
0x前缀表示十六进制(如0xFF),CSS 颜色使用#前缀。
准备好探索文本的十六进制面貌了吗?试试 TextKit 免费的 十六进制转换器——输入文本,即时查看其十六进制表示。