如何把文本转换为十六进制
- 在 输入 · 文本 中输入或粘贴文本。十六进制会随着输入显示在 输出 · Hex 中。
- 输入下方的 字符集 决定字符如何变成字节。除非接收方系统需要其他字符集,否则保持 UTF-8 即可。
- 在输出下方选择 大小写(小写或大写)、分隔符(无、空格、
:、0x或\x)以及 每行字节数(无、16 或 32)。 - 点击 复制输出 或 下载 获取结果。Hex → 文本 切换可以把它还原为文本,Hex 转文本 也可以。
输出样式
分隔符和大小写选项覆盖了十六进制常被粘贴的场景。以文本 Hi! 为例:
| 设置 | 输出 | 适用场景 |
|---|---|---|
| 无,小写 | 486921 | 哈希、URL、JSON |
| 空格,大写 | 48 69 21 | 十六进制编辑器、协议文档 |
: | 48:69:21 | 指纹、MAC 地址风格的列表 |
0x | 0x48 0x69 0x21 | C 和汇编源码 |
\x | \x48\x69\x21 | C、Python、Bash printf 中的字符串转义 |
\x 形式可以直接放进字符串字面量:在 Bash 中 printf '\x48\x69\x21' 会输出 Hi!。每行字节数 会把较长的输出按每行 16 或 32 字节分开,便于用肉眼数偏移量。
一个字符,一个或多个字节
ASCII 字符各占一个字节,UTF-8 中它们保持不变,所以对英文文本来说两种字符集给出的十六进制相同。其他字符则取决于字符集:
| 文本 | UTF-8 | ISO-8859-1 | UTF-16LE |
|---|---|---|---|
A | 41 | 41 | 41 00 |
é | c3 a9 | e9 | e9 00 |
€ | e2 82 ac | 不支持 | ac 20 |
👋 | f0 9f 91 8b | 不支持 | 3d d8 4b dc |
字符集无法表示的字符会被替换为 ?,状态栏会显示替换了多少个。如果另一个系统给出的十六进制与你的不一致,请先检查双方使用的字符集。
找出看不见的字符
转换为十六进制是查看屏幕上“什么都看不到”的字符最快的办法。两个显示起来一模一样的字符串,字节可能不同:
| UTF-8 中的十六进制 | 字符 |
|---|---|
20 | 普通空格 |
c2 a0 | 不换行空格,常见于从网页和 Word 复制来的文本 |
e2 80 8b | 零宽空格 |
ef bb bf | 文件开头的字节顺序标记(BOM) |
0d 0a | Windows 换行(Linux 和 macOS 上只有 0a) |
如果某个密码、API 密钥或配置值“明明正确却被拒绝”,把它粘贴到这里,将 分隔符 设为空格,查找上面这些字节。用 文本转 Base64 编码文本之前,同样的检查也有帮助:Base64 会保留每一个看不见的字节,它们会原封不动地进入编码结果。
在代码中把文本转为十六进制
"Hi!".encode("utf-8").hex() # '486921'
"Hi!".encode("utf-8").hex(" ") # '48 69 21' (separator argument, Python 3.8+)
"é".encode("latin-1").hex() # 'e9'
const hex = Array.from(new TextEncoder().encode("café"),
b => b.toString(16).padStart(2, "0")).join(" ");
// '63 61 66 c3 a9'
TextEncoder 始终生成 UTF-8。对应的 Base64 调用见 JavaScript 和 Python 页面。
常见问题
如何把字符串转换为十六进制?
把字符串粘贴到输入框。每个字符会按所选字符集变成对应的字节值,每个字节两位十六进制数字。在 Python 中等价于 "Hello".encode("utf-8").hex()。
"Hello" 的十六进制是什么?
在 ASCII 和 UTF-8 中都是 48 65 6c 6c 6f,对普通英文字母来说两者一致。在 UTF-16LE 中是 48 00 65 00 6c 00 6c 00 6f 00。
为什么 é 会变成两个字节 c3 a9?
UTF-8 用 2 到 4 个字节编码 U+007F 以上的每个字符。如果需要单字节的 e9,把 字符集 设为 ISO-8859-1(Latin-1)或 Windows-1252。
怎样让每个字节前面都带 0x?
把 分隔符 设为 0x,输出就是 0x48 0x65 0x6c 0x6c 0x6f。如果需要完整的 C 或 Rust 数组字面量,Base64 转字节数组 还会连声明一起写出来。