文本转十六进制

看一段内存转储、核对某个协议究竟往线上发了什么、拆一道 CTF 题目:迟早都要看到字符串背后的字节。粘贴文本,这个转换器就把它逐字节还原成十六进制,既可以像 hexdump 那样用空格隔开(48 65 6c 6c 6f),也可以连成一整串(48656c6c6f)。切换模式就是反方向:粘进来的十六进制会变回可读文本。

转换器是怎么工作的

  1. 1

    选择方向

    文本转十六进制会编码你输入的内容;十六进制转文本则把它还原成字符。

  2. 2

    选择分隔符

    编码时可以在字节之间放一个空格,也可以完全不放。就这两个选项。

  3. 3

    粘贴你的输入

    文本按 UTF-8 读取。十六进制可以带 0x 或 \x 前缀,也可以带逗号、空格或换行:这些都会自动去掉。

  4. 4

    转换并复制

    结果显示在下方,旁边有复制按钮。不会下载任何文件。

为什么用十六进制而不用十进制

一位十六进制数正好覆盖 4 个比特,因此两位正好覆盖一个字节,从无例外。十进制要靠心算才知道一个值还装不装得下(128 在范围内吗?256 呢?),十六进制则直接摆在眼前:00 是最小的字节,ff 是最大的,中间每个字节都是两个字符宽。正是这种对齐,让内存转储、抓包记录、文件签名和颜色代码都用十六进制来写。

这个转换器实际输出什么

  • 一律小写。 编码端写的是 6c,绝不会是 6C。十六进制不区分大小写,所以并没有信息损失;但如果目标格式非要大写,把结果再过一遍大小写转换工具即可。
  • 每个字节固定两位。 制表符是 09 而不是 9,这样字节边界才数得清。
  • 空格或者什么都不加。 只有这两种分隔方式。编码端不会补 0x 或 \x 前缀,需要 C 或 Python 转义字符串的话请在自己的编辑器里加。
  • 全程 UTF-8。 文本是按字节计量的,不是按字符。

十六进制与 Unicode

H 在 UTF-8 里占一个字节,所以变成 48。凡是超出纯 ASCII 的字符都要占更多:

字符 UTF-8 十六进制 字节数
A 41 1
é c3 a9 2
€ e2 82 ac 3
🚀 f0 9f 9a 80 4

于是 Hello 编码成 48 65 6c 6c 6f,五个字符五个字节;而 café 编码成 63 61 66 c3 a9:四个字符,却是五个字节,因为 é 要占两个。汉字更占地方,绝大多数常用汉字在 UTF-8 里都是三个字节,比如「你好」两个字就会得到六对十六进制数:e4 bd a0 e5 a5 bd。一段短短的文字给出的十六进制对数比你预期的多,原因通常就在这里。

解码端能接受哪些写法

下面任意一种粘进去,都会还原成 Hello:

  • 48 65 6c 6c 6f,hexdump 风格
  • 48656c6c6f,不带分隔符的原始串
  • 0x48656c6c6f,整数字面量风格
  • \x48\x65\x6c\x6c\x6f,C 和 Python 的转义写法
  • 48,65,6C,6C,6F,逗号分隔,大小写混用也没关系

前缀、逗号、空格、制表符和换行都会在解码前先去掉。其他字符不会:48-65 里的连字符、颜色代码前面的 #、或者排在 f 之后的字母,都会让解码停下;位数为奇数同样如此,因为半个字节变不成字符。遇到这些情况,工具宁可什么都不返回,也不去猜一个残缺的结果。输出框一直空着,问题就出在这里。

十六进制颜色只是同一套写法,内容并不相同

#ff8800 用的确实是同一套十六进制,但那三个字节描述的是红、绿、蓝三个通道,不是字符。把 # 去掉再拿到这里解码,得到的会是三个原始字节,拼不成可读文本。这种需求请改用取色工具。

常见问题

是的。十六进制和 base16 是同一套体系的两个名字:十六个数码(0 到 9 以及 a 到 f),每个承载 4 个比特。

这个工具不行,编码端一律输出小写。由于十六进制不区分大小写,4f 和 4F 是同一个字节,所以格式有要求时把结果过一遍任意大小写转换工具即可。解码端两种写法都能读。

解码端在去掉 0x 和 \x 前缀、逗号和空白之后,只接受 0 到 9 以及 a 到 f 这些数码,而且个数必须是偶数。连字符、#、排在 f 之后的字母,或者少了一位,都会让输入变得无效,而工具宁愿给出空结果也不给出错误结果。请数一数位数,再找找混进去的标点。

大多数表情符号位于 Unicode 的辅助平面,UTF-8 用四个字节来存放。纯 ASCII 字符仍是一个字符一个字节,这正是英文一个字符对应一对、而中文不是的原因。

不能。这是一个文本框,处理的是你能输入或粘贴的内容。二进制数据用 base64 更紧凑,也更方便传输。

会。转换是在我们的服务器上完成的,你粘贴的内容会随请求一起发出,结果再传回来。我们只记录这次操作和你选择的选项,从不记录文本本身,响应发出之后也不会保留文本。真正机密的内容,请使用能在你自己电脑上离线运行的转换工具。

相关工具

此工具还提供其他语言版本