十六进制(Hex)编码解码

将文本、文件或原始字节转换为十六进制,也可以反向解码。可以设置大小写、分隔符以及 0x 或 \x 前缀,解码时会自动清理常见的 Hex 格式。

完全在浏览器中运行,不会上传任何数据。

使用方法

  1. 选择“编码”把文本转换为十六进制,或选择“解码”把十六进制还原为文本。
  2. 输入或粘贴内容,也可以打开文件,查看其字节的十六进制形式。
  3. 设置选项:“大写”、分隔符(无、空格或冒号)以及前缀(无、0x 或 \x)。
  4. 复制结果,或将结果下载为文件。

什么是十六进制(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.is4261736536342e6973
你好e4bda0e5a5bd

常见问题

如何把十六进制转换为文本?

切换到“解码”并粘贴十六进制内容。空格、冒号以及 0x、\x 前缀会被自动去除,字节默认按 UTF-8 显示为文本,也可以选择其他文本编码。

十六进制应该用大写还是小写?

两者表示的字节完全相同。RFC 4648 使用大写,而很多编程语言默认输出小写。如果目标系统要求大写,勾选“大写”即可;解码时两种写法都能识别。

为什么十六进制比原数据长一倍?
每个字节变成两个字符,体积增加 100%,而 Base64 只增加约 33%。如果在意体积,可以用 Hex 转 Base64 转换。
这和把数字转换为十六进制一样吗?
不完全一样。本工具编码的是字节序列,例如一段文本的字节。若要转换单个整数(例如把 255 转为 FF),请使用进制转换器。