把二进制数据用文本表示,Base64 和 Hex 是两个最常见的选择。它们都能做到这件事,但密度、可读性和典型场景差异显著。选错通常不致命,但会增加存储成本、调试难度或 URL 长度。
这篇指南对比两者的内部机制、性能特征和最佳使用场景。想自己动手编码解码两种格式?试试我们的免费 Base64 编解码工具,对比两种输出结果。
基本原理
Hex(十六进制):每个字节用两个十六进制字符表示(0-9, a-f)。一个字节的 256 个值映射到这两个字符的组合。
字节 0x48 → "48"
字节 0x65 → "65"
字节 0xFF → "ff"
Base64:每 3 个字节用 4 个 Base64 字符表示(A-Z, a-z, 0-9, +, /)。每个字符承载 6 位数据。
3 字节 = 24 位 → 4 个 6 位字符
这就是密度差异的来源:Hex 每字符承载 4 位,Base64 每字符承载 6 位。
密度对比
| 编码 | 字符数 / 字节 | 体积开销 | 字符集大小 | |------|---------------|----------|------------| | Hex | 2.0 | 100% | 16 | | Base64 | ~1.33 | 33% | 64 |
同样 1 KB 的二进制数据:
- Hex 编码后:2 KB
- Base64 编码后:约 1.33 KB
差距在数据量大时显著。100 MB 文件 Hex 化是 200 MB,Base64 化只有 133 MB。
实战对比:编码 "Hello"
5 字节字符串 "Hello",看两种编码的实际输出:
import base64
data = b"Hello"
# Hex 编码
hex_encoded = data.hex()
# "48656c6c6f" (10 个字符)
# Base64 编码
b64_encoded = base64.b64encode(data).decode()
# "SGVsbG8=" (8 个字符,含 1 个填充 =)
# 字节对比
print(f"原始: {len(data)} 字节") # 5
print(f"Hex: {len(hex_encoded)} 字符") # 10
print(f"Base64: {len(b64_encoded)} 字符") # 8
注意 Base64 的 = 填充。Base64 把输入按 3 字节分组,"Hello" 是 5 字节(一组 3 + 一组 2),第二组只有 2 字节,编码后要补 1 个 = 让总长度是 4 的倍数。
Hex 的优势
1. 可读性强
每个字节单独可读,字节边界清晰。调试二进制协议时这个特性至关重要:
# Hex:能直接看出第 3 个字节是 0x6c
48 65 6c 6c 6f
# Base64:字节边界被 6 位分组打乱
SGVsbG8=
2. 大小写不敏感(实现上)
很多系统接受大写或小写 hex,简化了格式约定。Base64 严格区分大小写。
3. 易于手动构造
颜色代码、MAC 地址、内存地址这些短数据,hex 是天然选择:
# 颜色代码是 hex
#FFFFFF # 纯白
#FF0000 # 纯红
# MAC 地址用 hex 分隔
01:23:45:67:89:ab
# 内存地址
0x7ffeefbff5c8
4. 哈希摘要的标准表示
SHA-256、MD5 等哈希输出几乎总是用 hex 表示:
# SHA-256 输出是 32 字节,显示为 64 个 hex 字符
echo -n "hello" | shasum -a 256
# 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
用 Base64 表示 SHA-256 会更紧凑(44 字符 vs 64 字符),但业界惯例是 hex,工具链都按 hex 设计。
Base64 的优势
1. 紧凑
33% vs 100% 的体积差异。在大数据场景下显著。
2. URL 安全变体
标准 Base64 用 + 和 /,URL 里需要转义。Base64URL 用 - 和 _ 替代,可以直接放 URL:
import base64
# 标准 Base64(不适合 URL)
standard = base64.b64encode(b"\xfb\xff") # b'+/8='
# Base64URL(URL 安全)
urlsafe = base64.urlsafe_b64encode(b"\xfb\xff") # b'-_8='
3. 适合嵌入文本格式
JSON、XML、HTML 这些文本格式无法直接存二进制。Base64 把二进制塞进文本字段:
{
"image": "data:image/png;base64,iVBORw0KGgo..."
}
4. 多字节字符友好
Hex 编码 UTF-8 字符串时,每个字节单独编码,结果看不出原文结构。Base64 编码整段字节流,结果更紧凑。
何时用 Hex
- 哈希摘要:SHA-256、MD5、HMAC 的标准表示
- 加密密钥和 IV:调试时手动对比很方便
- 二进制协议调试:网络协议、文件格式、序列化数据
- 短二进制数据:颜色代码、MAC 地址、UUID、内存地址
- 加密货币和区块链:地址、交易哈希、区块哈希
何时用 Base64
- 数据 URI:图片、字体内嵌到 HTML 或 CSS
- JWT:token 的三段都是 Base64URL
- 电子邮件附件:MIME 标准用 Base64 编码二进制附件
- 大体积二进制:节省存储或传输成本
- JSON / XML 中的二进制字段:API 响应里嵌入二进制
性能注意
编码速度两者差不多,都不太可能成为瓶颈。但解码 Base64 时要注意填充处理,错误的填充会导致解码失败。Hex 的解码逻辑更简单,每两个字符直接映射一个字节。
# 命令行编码示例
echo -n "Hello" | xxd -p # hex: 48656c6c6f
echo -n "Hello" | base64 # base64: SGVsbG8=
在本地完成编码
无论你需要把 API 响应中的 Base64 字段解码、把图片转成 data URI,还是把数字在十六进制和十进制之间转换,都不应该把数据发到陌生服务器。
Base64 编解码工具、进制转换器 和 SHA-256 哈希生成器 都在浏览器本地完成所有处理。你的二进制数据、API 响应、配置文件都不会上传到任何服务器。这在处理包含密钥、用户数据或专有内容的数据时尤其重要。
总结:调试、短数据、哈希摘要选 hex;嵌入文本、大数据、URL 场景选 Base64。两者各有所长,理解它们的密度和可读性权衡就能做出正确选择。
relatedTools
相关文章
最佳在线 JWT 解码工具推荐(2026)
对比主流在线 JWT 解码工具,从签名校验、隐私保护、功能完整度等维度评测。DevToolkit Pro 凭借本地解码和 HS256 签名校验脱颖而出。
最佳在线 Base64 编解码工具推荐(2026)
对比主流在线 Base64 编解码工具,从 Unicode 支持、隐私保护、使用便捷性等维度评测。DevToolkit Pro 凭借本地运行和 Unicode 安全编码成为首选。
在线 Base64 转图片工具:将编码字符串还原为图片文件
学习如何将 Base64 编码字符串还原为图片文件。了解 Base64 解码原理、常见的 Base64 图片格式,以及在 Web 开发中的实际应用场景。