上传文件
  1. base64hub
  2. 其他进制编码
  3. Base16(hex)

Base16 编码与解码(RFC 4648 Hex)

把文本编码为 RFC 4648 Base16,字母表为 0–9 和 A–F,每个字节两个字符;也可以把 Base16 解码回文本。Hello 就是 48656C6C6F。

免费 无需注册,不限次数 本地 不上传任何内容 RFC 4648 第 8 节字母表,大写 更新于 2026年10月27日
输入 0字节 0 B输出 0

在你的浏览器中处理。此页面无法将你的数据发送到任何地方: 我们如何确认

如何使用 Base16 编码器

  1. 在输入框中输入或粘贴文本,Base16 会随着输入实时显示在输出框中。
  2. 输入框下方的 字符集 决定字符如何转换成字节,默认为 UTF-8。
  3. 要解码,请点击工具上方的 Base16(RFC 4648)→ 文本,或点击 ⇄ 互换 按钮,它还会把当前输出移到输入框中。输入中的小写数字、空格和冒号都可以接受。
  4. 点击 复制输出 或 下载 结果。从 和 到 菜单可以切换到 Base32、Base64 等其他格式进行对比。

如果需要带分隔符、0x 前缀或小写输出的 hex,文本转 Hex 提供了这些选项。

Base16 与 RFC 4648

RFC 4648 把 Base64、Base32 和 Base16 放在一起定义,而 Base16 是三者中最简单的:没有填充和换行,也不需要重新分组比特。每个字节拆成两个 4 比特的半字节,每个半字节对应一个字符。RFC 自带的测试向量:

输入Base16
(空)(空)
f66
fo666F
foo666F6F
foob666F6F62
fooba666F6F6261
foobar666F6F626172

输出长度总是正好等于字节数的两倍,所以 Base16 不需要填充字符。Base64 和 Base32 每块包含多个字节,必须用 = 补满最后一块。RFC 概览列出了这些编码分别定义在哪里。

Base16、Base32 与 Base64 对比

Hello, world 的 12 个字节在各 RFC 4648 编码下的结果:

编码输出长度
Base1648656C6C6F2C20776F726C6424
Base32JBSWY3DPFQQHO33SNRSA====24(不带填充为 20)
Base64SGVsbG8sIHdvcmxk16

Base16 用体积换来了清晰。你可以直接从中读出字节并逐位比较数值,而且它能通过任何能处理字母和数字的系统,包括不区分大小写的系统。Base64 短三分之一,当字节需要放进 JSON、电子邮件或 URL 中传输时,它是默认选择。编码对比有更深入的介绍,还包括 Base58 和 Base85。

在哪里会见到 Base16

  • 哈希摘要和校验和,sha256sum 等工具通常以小写输出。
  • OpenPGP 密钥指纹,GnuPG 以每四个一组的大写 hex 显示。
  • RFC 和其他规范中的测试向量,在这些场合字节值清晰无歧义比长度更重要。
  • 需要不区分大小写或纯字母数字数据的协议和格式。

要把这样的值转成 Base64(例如某个 API 要求以 Base64 提交摘要),请用 Hex 转 Base64;反方向则用 Base64 转 Hex。

在代码中使用 Base16

import base64
base64.b16encode(b"Hello").decode()          # '48656C6C6F'
base64.b16decode("48656c6c6f", casefold=True)  # b'Hello'
printf 'Hello' | basenc --base16      # 48656C6C6F
echo 48656C6C6F | basenc --base16 -d  # Hello

basenc 是 GNU coreutils 8.31 及以上版本的一部分。在 Node.js 中,Buffer.from("Hello").toString("hex").toUpperCase() 能得到同样的结果。Python 和 Bash 页面介绍了这些模块中 Base64 相关的部分。

常见问题

Base16 和十六进制是一回事吗?

对字节来说是的。Base16 是 RFC 4648 对 hex 编码的称呼:每个字节变成 0123456789ABCDEF 中的两个字符。RFC 规定使用大写,而日常使用的 hex 常常是小写。

Base16 比原始数据大多少?

正好大一倍,开销为 100%。Base32 增加 60%,Base64 约增加 33%,所以 Base16 是 RFC 4648 编码中最不紧凑、也最容易阅读的一种。

为什么 Python 的 b16decode 拒绝我的字符串?

base64.b16decode 默认只接受大写。小写输入请传入 casefold=True,或者改用 bytes.fromhex(),它接受大小写和空格。