如何将文本转换为十六进制
- 输入或粘贴文本。支持中文在内的所有语言以及 emoji。
- 选择字符编码(标准为 UTF-8)、字母大小写以及字节分隔方式。勾选每 16 字节换行,即可得到十六进制转储(hex dump)式的排版。
- 复制十六进制字符串,或将其下载为文本文件。
文本如何转换为十六进制
计算机以字节的形式存储文本。转换器会在所选编码中查出每个字符对应的字节值,并将其写成两位十六进制数字。在 ASCII 和 UTF-8 中,A 是 65 = 41,a 是 97 = 61,空格是 32 = 20,所以“Hi!”会变成 48 69 21。
| 字符 | 十进制 | 十六进制 |
|---|---|---|
A … Z | 65 … 90 | 41 … 5A |
a … z | 97 … 122 | 61 … 7A |
0 … 9 | 48 … 57 | 30 … 39 |
| 空格 | 32 | 20 |
! | 33 | 21 |
| 换行符 | 10 | 0A |
UTF-8、Latin-1 与 UTF-16 编码对比
同一个字符在不同编码下会产生不同的字节。网页、JSON 和大多数文件都应使用 UTF-8;只有当接收方系统要求时,才需要改用其他编码。以汉字“中”为例,UTF-8 编码为 E4 B8 AD,UTF-16 LE 编码为 2D 4E,而 Windows-1252 无法表示它。
| 文本 | UTF-8 | Windows-1252 | UTF-16 LE |
|---|---|---|---|
A | 41 | 41 | 41 00 |
é | C3 A9 | E9 | E9 00 |
€ | E2 82 AC | 80 | AC 20 |
| 😀 | F0 9F 98 80 | 无法表示 | 3D D8 00 DE |
用代码实现字符串转十六进制
- Python:
'Hello'.encode().hex()返回48656c6c6f;.hex(' ')会在字节之间加空格。 - Node.js:
Buffer.from('Hello').toString('hex') - 浏览器 JavaScript:
[...new TextEncoder().encode('Hello')].map((b) => b.toString(16).padStart(2, '0')).join('') - Linux 和 macOS:
echo -n 'Hello' | xxd -p
常见问题
文本转十六进制和 ASCII 转十六进制一样吗?
对于英文字母、数字和标点符号来说是一样的:ASCII 和 UTF-8 会生成相同的字节。而 é、ß、Ж、中这类字符以及 emoji 不属于 ASCII,UTF-8 会把它们各自编码为 2–4 个字节。
为什么一个字符会生成多个十六进制字节?
在 UTF-8 中,只有 ASCII 字符占一个字节。é 会变成 C3 A9,€ 会变成 E2 82 AC,常用汉字占三个字节,大多数 emoji 则占四个字节。如果目标系统要求 UTF-16 或 Latin-1 编码,请选择相应的编码。
应该使用哪种分隔符?
哈希值和紧凑字符串不需要分隔符;易读的十六进制转储用空格;MAC 地址和证书指纹用冒号;C、C# 或 Java 中的数组用 0x48, 0x65 格式;C、Python 或 Shell 脚本中的字符串字面量则用 \x48 格式。
如何把十六进制转换回文本?
点击交换按钮:十六进制结果会移到输入框中,并使用相同的编码进行解码。解码器支持这里提供的所有分隔符。