上传文件
  1. base64hub
  2. 其他进制编码
  3. Hex 转文本

Hex 转文本、ASCII 和字符串

粘贴 48 65 6c 6c 6f 这样的 hex 字节,就能读出它们对应的文本。空格、冒号、0x 和 \x 前缀都可以,在你选择其他字符集之前默认按 UTF-8 处理。

免费 无需注册,不限次数 本地 不上传任何内容 27 种字符集,从 ASCII 到 Shift_JIS 更新于 2026年10月27日
输入 0字节 0 B输出 0

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

如何把 hex 转为文本

  1. 把 hex 粘贴到 输入 · Hex。大写小写均可,有没有分隔符都行。
  2. 文本会随输入实时出现在 输出 · 文本 中。如果想按 运行 再转换,取消勾选 实时。
  3. 如果输出中出现 �,打开输出下方的 字符集,换一个试试。默认是 UTF-8;列表中还有 ASCII、Latin-1、Windows-1252 以及另外 23 种。
  4. 用 复制输出 或 下载 获取文本。如果 hex 是文件的转储而不是文本,保存字节 会把原始字节写入磁盘,并根据内容猜测扩展名。

工具上方的 文本 → Hex 切换可以反转方向,也可以直接前往 文本转 Hex。

转换器能读取的 hex 格式

不同工具产生的 hex 写法各不相同。下面这些都会解码为 Hello:

格式示例常见来源
纯 hex48656c6c6fxxd -p、sha256sum、数据库转储
空格分隔48 65 6c 6c 6fWireshark、十六进制编辑器
冒号分隔48:65:6c:6c:6f证书指纹、openssl 输出
短横线分隔48-65-6C-6C-6F.NET BitConverter.ToString
0x 前缀0x48 0x65 0x6c 0x6c 0x6f 或 0x48656c6c6fC 源码、调试器
\x 转义\x48\x65\x6c\x6c\x6fPython、shell 脚本、日志

逗号、分号和句点也可以作为分隔符。只粘贴 hex 列:xxd 的默认视图每行以 00000000: 这样的偏移量开头,以 ASCII 列结尾,转换器会把偏移量当作字节读取,然后在 ASCII 列的第一个字母处报错。请改用 xxd -p 得到纯 hex。

如何把 hex 读作 ASCII

每对十六进制数字是一个字节,在 ASCII 中,每个小于 80 的字节就是一个字符。值得记住的范围:

Hex字符
20空格
30–39数字 0–9
41–5AA–Z
61–7Aa–z
21–2F! " # $ % & ' ( ) * + , - . /
0A、0D换行和回车(0D 0A 是 Windows 换行)

大写和小写字母正好相差 20:41 是 A,61 是 a。记住这一点再配合上表,短的 hex 用眼睛就能读出来。48 65 6c 6c 6f 2c 20 77 6f 72 6c 64 是 Hello, world:2c 是逗号,20 是空格。

Hex 转 UTF-8:80 到 FF 的字节

基本英文以外的字符在 UTF-8 中都不止一个字节,而且这些字节全都大于等于 80。同样的字节,用不同字符集读取会得到不同的文本:

Hex按 UTF-8 读取按 Windows-1252 读取
63 61 66 c3 a9cafécafé
e2 82 ac€â‚¬
f0 9f 91 8b👋👋
63 61 66 e9caf�café

前三行是 UTF-8 数据;最后一行是 Latin-1 或 Windows-1252 数据,其中 é 是单个字节 e9。一串 Ã 和 â 字符几乎总是意味着 UTF-8 字节被用单字节字符集读取了。如果换哪种字符集都得不到通顺的文本,这些字节很可能根本不是文本:看看状态栏中的 看起来像,识别出格式时它会给出名称。

Hex、Base64 与相同的字节

Hex 每个字节用两个字符,Base64 每三个字节用四个字符,所以同样的数据用 Base64 要短三分之一。如果你手里的内容以 SGVsbG8 之类开头,并且含有 f 之后的字母,那就是 Base64:用 Base64 转文本 解码。要把 hex 字节重新编码为 Base64 供 API 或配置文件使用,请用 Hex 转 Base64。hex、Base32、Base58 和 Base85 的比较 介绍了它们各自的使用场景。

在代码中把 hex 转为字符串

bytes.fromhex("48656c6c6f").decode("utf-8")       # 'Hello'
bytes.fromhex("48 65 6c 6c 6f").decode("utf-8")   # spaces are fine: 'Hello'

bytes.fromhex 会跳过空格,但不接受冒号和 0x,所以要先去掉它们。在 Node.js 中:

Buffer.from("48656c6c6f", "hex").toString("utf8");   // 'Hello'
Buffer.from("48zz65", "hex");                         // <Buffer 48>

第二行展示了一个陷阱:Buffer.from 遇到第一个非 hex 字符就停止,返回已经读到的内容,而且不报错。更多用法见 Python 和 Node.js 页面。

常见问题

怎样把 hex 转为 ASCII?

粘贴 hex,读取输出即可。ASCII 只覆盖 00 到 7F 的字节,所以如果希望超出范围的字节显示为 � 而不是按 UTF-8 解读,请把 字符集 设为 ASCII。

48 65 6c 6c 6f 对应什么文本?

Hello。48 是 H,65 是 e,6c 是 l(两次),6f 是 o。

为什么我的 hex 变成了 é 之类的奇怪字符?

这些字节是 UTF-8,却被当作 Latin-1 或 Windows-1252 读取,或者反过来。c3 a9 在 UTF-8 中是 é,在 Windows-1252 中是 é。切换 字符集,直到文本显示正确。

“十六进制数字个数为奇数”是什么意思?

每个字节是两位十六进制数字,所以总位数必须是偶数。复制时丢了一位,通常在开头或结尾。检查输入的第一对和最后一对数字。

可以为某次转换生成链接吗?

可以。在页面地址后面加上 #in= 和 hex,例如 /hex-to-text/#in=48656c6c6f。# 之后的部分只留在浏览器中,不会发送到服务器。