TextKit
← 返回博客

十六进制编码详解:文本如何变成 Hex

· TextKit
十六进制编码数据表示

十六进制(Hexadecimal)是程序员日常工作中频繁接触的数字表示方式。从颜色代码 #FF5733 到内存地址 0x7FFF,从网络数据包到文件魔数,十六进制无处不在。这篇指南将带你理解十六进制的原理,以及文本如何转换为十六进制表示。

什么是十六进制?

十六进制是一种基数为 16 的数制系统,使用 16 个符号来表示数值:0-9 和 A-F(或 a-f)。其中 A 表示 10,B 表示 11,以此类推,F 表示 15。

为什么是 16?因为 16 是 2 的 4 次方,这意味着一个十六进制数字恰好可以表示 4 个二进制位(比特)。一个字节(8 比特)正好用两个十六进制数字表示。这种与二进制的天然对齐关系,使十六进制成为表示二进制数据的人类可读形式。

十六进制与其他进制的对照:

十进制二进制十六进制
10000010100A
160001000010
25511111111FF
256000100000000100

注意:十六进制的 10 等于十进制的 16,FF 等于十进制的 255——一个字节能表示的最大值。

文本转十六进制的原理

文本转十六进制的过程分为两步:先将每个字符映射为数字编码,再将数字编码转换为十六进制表示。

第一步:字符到码点

计算机使用字符编码标准为每个字符分配唯一的数字编号(码点)。最基础的标准是 ASCII:

  • A → 65
  • a → 97
  • 0 → 48
  • ! → 33
  • 空格 → 32

ASCII 覆盖了 128 个字符,对英语足够,但无法表示中文、日文等。Unicode 扩展了编码空间,可以表示超过一百万个字符:

  • → 20013(U+4E2D)
  • 🎉 → 128515(U+1F389)

第二步:码点到十六进制

将码点转换为十六进制表示:

  • A → 65 → 41
  • a → 97 → 61
  • → 20013 → 4E2D

在 UTF-8 编码下,一个中文字符占 3 个字节,因此”中”的完整十六进制表示是 E4 B8 AD(UTF-8 编码的字节序列),而不仅仅是码点 4E2D

完整示例

以文本 “Hi” 为例:

  1. H → ASCII 码 72 → 十六进制 48
  2. i → 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 开头。通过检查文件的十六进制头部,可以判断文件的真实类型,即使扩展名被篡改。

内存地址与逆向工程

在底层编程和逆向工程中,内存地址和数据都以十六进制表示。0x7FFF5FBFFD8140734799798360 更容易阅读和记忆。

使用 TextKit 的十六进制转换器

TextKit 提供免费的 十六进制转换器,支持双向转换:

  1. 文本转十六进制:输入文本,即时获得每个字符的十六进制表示
  2. 十六进制转文本:粘贴十六进制字符串,解码回可读文本
  3. 支持多种分隔符格式(空格、无分隔符、0x 前缀)
  4. 一键复制结果

所有转换在浏览器中完成,数据不离开你的设备。

十六进制使用技巧

  • 注意编码:同一个字符在不同编码下有不同的十六进制表示。转换前确认使用的是 UTF-8 还是其他编码。
  • 字节对齐:十六进制表示应按字节对齐。如果位数不是偶数,前面补零——A 应写成 0A 而不是 A
  • 区分大小写:十六进制中 Aa 等价,但保持大小写一致是好习惯。通常使用大写。
  • 前缀约定:编程中常用 0x 前缀表示十六进制(如 0xFF),CSS 颜色使用 # 前缀。

准备好探索文本的十六进制面貌了吗?试试 TextKit 免费的 十六进制转换器——输入文本,即时查看其十六进制表示。