文本转十六进制
看一段内存转储、核对某个协议究竟往线上发了什么、拆一道 CTF 题目:迟早都要看到字符串背后的字节。粘贴文本,这个转换器就把它逐字节还原成十六进制,既可以像 hexdump 那样用空格隔开(48 65 6c 6c 6f),也可以连成一整串(48656c6c6f)。切换模式就是反方向:粘进来的十六进制会变回可读文本。
转换器是怎么工作的
-
1
选择方向
文本转十六进制会编码你输入的内容;十六进制转文本则把它还原成字符。
-
2
选择分隔符
编码时可以在字节之间放一个空格,也可以完全不放。就这两个选项。
-
3
粘贴你的输入
文本按 UTF-8 读取。十六进制可以带 0x 或 \x 前缀,也可以带逗号、空格或换行:这些都会自动去掉。
-
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 更紧凑,也更方便传输。
会。转换是在我们的服务器上完成的,你粘贴的内容会随请求一起发出,结果再传回来。我们只记录这次操作和你选择的选项,从不记录文本本身,响应发出之后也不会保留文本。真正机密的内容,请使用能在你自己电脑上离线运行的转换工具。
相关工具
小于或等于符号
复制 ≤ 符号及相关数学比较符号。包含适用于电子表格、论文和网页的 Unicode、HTML 实体及 LaTeX 标记。
可复制的箭头符号
一键复制常用 Unicode 箭头:直线、双线、斜向、钩形、环形和三角样式,适合文档、聊天和设计。
泰语数字转文字工具
在浏览器本地将最多 18 位数字写成泰语,或用 ASCII 数字或泰文数字将准确的泰铢和萨当金额写成文字,不进行舍入。
象形文字翻译器
用古埃及书吏表示单个读音的符号,把你的名字拼写成埃及象形文字。可以加上王名圈,复制符号或下载 PNG 图片。
Instagram字体生成器
生成Unicode字体样式(粗体、斜体、手写体、等宽体、花体),可直接粘贴至您的Instagram个人简介、姓名、配文及评论中。
城市名生成器
为世界观构建、地图、游戏、故事和模拟数据生成虚构的城市、城镇、村庄和首都名称,每个结果均附简短说明。
此工具还提供其他语言版本
- Text till hex [SV]
- Văn bản sang hex [VI]
- Text in Hex [DE]
- Teks ke heksadesimal [ID]
- テキストを 16 進数に変換 [JA]
- Tekst na hex [PL]
- تحويل النص إلى ست عشري [AR]
- Texto para hexadecimal [PT]
- Texto a hexadecimal [ES]
- Texte en hexadécimal [FR]
- 텍스트를 16진수로 [KO]
- Tekst naar hex [NL]
- แปลงข้อความเป็นเลขฐาน 16 [TH]
- Text to Hex [EN]
- Da testo a esadecimale [IT]
- Текст в шестнадцатеричный код [RU]
- Metinden onaltılığa [TR]