十六进制编码指南:把文字看清楚,而不是藏起来
需要判断「这段文字到底存了什么字节」时,十六进制是最直接的观察方式;但它只是一种写法,不是保护。
什么时候该把文字摊成字节
同一段话在两个系统里显示不一样、接口报「非法字符」、配置里多了看不见的空格,这些问题的共同点是:肉眼看到的字符和实际存储的字节不是一回事。转成十六进制后,空格是 20、换行是 0a、制表符是 09,问题立刻现形。
另一个常见用途是对照协议文档。很多字段按字节定义,比如某个头部固定两字节、某个标志位占一个字节;把字符串转成字节串,再和文档逐字节比对,比盯着原文猜要可靠得多。
- 排查不可见字符:空格 20、换行 0a、制表符 09
- 核对协议字段与定长头部
- 比较两段「看起来一样」的文本
- 确认中文和 emoji 各占几个字节
读结果时要盯住这三件事
第一,编码是 UTF-8,不是 UTF-16。一个英文字母占一个字节,一个常用汉字通常占三个字节,emoji 往往占四个字节。看到「中」变成 e4 b8 ad 不要意外,这正是 UTF-8 的定义,不是工具出错。
第二,每个字节固定两位。中间的单个空格只是分隔符,不属于数据;复制时把换行和多余空格带进去,解码端通常还能按空白切分容忍,但混进别的字符就会解错。第三,0x 前缀只是书写习惯,别把它当成内容。
- 一个汉字通常 3 字节,emoji 通常 4 字节
- 小写、两位一组,空格只作分隔
- 换行 CRLF 会多出 0d,跨系统对比时先统一
它不是加密,也不适合存文件
十六进制没有密钥,任何人拿到都能还原,所以不能用它藏密码、藏接口地址或「保护」配置。它带来的只是可读性变化:体积翻倍,信息一点没少。真要保密,用加密;要放进 URL 或 JSON,用 Base64 更省空间。
另外,这个工具只处理文本。图片、压缩包、可执行文件请用 xxd、hexdump 这类命令行工具做十六进制转储,它们还会标出偏移量,方便定位。把几十兆的文件读进浏览器,页面会先卡住。
- 没有密钥,任何人都能一步还原
- 体积是原文的两倍,信息量不变
- 二进制文件用 xxd / hexdump,不用浏览器
常见问题
为什么「中」是 e4 b8 ad?
因为工具按 UTF-8 编码:U+4E2D 落在三字节区间,编码结果就是这三个字节。换成 GBK 会得到两个字节,所以在不同编码之间对比十六进制,先确认双方用的是同一套编码。
十六进制和 Base64 有什么区别?
两者都能无损还原。十六进制把每个字节写成两个字符,体积是原文的两倍;Base64 用 64 个字符表示,体积约 1.33 倍,更适合塞进文本协议。可读性上十六进制更直观,体积上 Base64 更省。
能拿十六进制当加密吗?
不能。没有密钥、没有强度,谁都能一步还原。把它当加密,等于把密码写在便签背面。需要保密请用真正的加密工具,并妥善管理密钥本身。
相关工具:十六进制编码器