使用方法
- 选择“编码”把文本转换为十六进制,或选择“解码”把十六进制还原为文本。
- 输入或粘贴内容,也可以打开文件,查看其字节的十六进制形式。
- 设置选项:“大写”、分隔符(无、空格或冒号)以及前缀(无、0x 或 \x)。
- 复制结果,或将结果下载为文件。
什么是十六进制(Base16)?
十六进制使用 16 个符号:数字 0 到 9 和字母 A 到 F。每个十六进制数字承载 4 位,所以每个字节正好写成两位,从 00 到 FF。编码后的体积是原数据的两倍,比 Base64 和 Base32 都大,但字节边界一目了然,这也是调试器、十六进制编辑器和网络工具都用它显示数据的原因。
RFC 4648 将这种编码标准化为 Base16,使用大写字母表,没有填充。实际使用中小写同样常见,包括本工具在内的解码器都能同时接受两种写法。
十六进制的常见用途
- 哈希与密钥。SHA-256 摘要有 32 个字节,写成 64 个十六进制字符。密钥、UUID 和校验和通常也用十六进制表示。
- 硬件地址。MAC 地址是 6 个字节的十六进制,一般用冒号分隔,选择冒号分隔符即可得到这种格式。
- 转义序列。C、Python 和 JavaScript 字符串中可以用
\x加两位十六进制数字表示一个字节,\x前缀选项生成的正是这种写法。 - Web 格式。
#FF8800这样的 CSS 颜色就是 3 个字节的十六进制,URL 百分号编码则把字节写成%加两位十六进制数字。
把十六进制解码为文本
解码器对格式很宽容:大小写均可,会忽略空格、换行、逗号、冒号、分号和连字符,并去掉 0x、\x、% 和 &#x 前缀。xxd -p 的输出、MAC 地址、UUID、逗号分隔的 0x 列表、%XX 转义和 HTML 十六进制实体都可以直接粘贴。每个字节需要两位数字,位数为奇数时会报错。解码出的字节按所选的文本编码显示为文本。
如果想在不经过文本的情况下转换编码,可以使用 Hex 转 Base64 或 Base64 转 Hex。
在代码中使用十六进制
# Python
'Hi'.encode().hex() # '4869'
bytes.fromhex('4869').decode() # 'Hi'
// Node.js
Buffer.from('Hi').toString('hex') // '4869'
Buffer.from('4869', 'hex').toString('utf8') // 'Hi'
# Shell
printf 'Hi' | xxd -p # 4869
编码规格
| 字母表 | 0-9 A-F |
|---|---|
| 输出体积 | 每字节 2 个字符(200%) |
| 填充 | 无 |
| 标准 | RFC 4648 第 8 节 |
| 区分大小写 | 否 |
编码示例
| 输入 (UTF-8) | 输出 |
|---|---|
Hello, World! | 48656c6c6f2c20576f726c6421 |
Base64.is | 4261736536342e6973 |
你好 | e4bda0e5a5bd |
常见问题
如何把十六进制转换为文本?
切换到“解码”并粘贴十六进制内容。空格、冒号以及 0x、\x 前缀会被自动去除,字节默认按 UTF-8 显示为文本,也可以选择其他文本编码。
十六进制应该用大写还是小写?
两者表示的字节完全相同。RFC 4648 使用大写,而很多编程语言默认输出小写。如果目标系统要求大写,勾选“大写”即可;解码时两种写法都能识别。
为什么十六进制比原数据长一倍?
每个字节变成两个字符,体积增加 100%,而 Base64 只增加约 33%。如果在意体积,可以用 Hex 转 Base64 转换。
这和把数字转换为十六进制一样吗?
不完全一样。本工具编码的是字节序列,例如一段文本的字节。若要转换单个整数(例如把 255 转为 FF),请使用进制转换器。