悦省yueser.com

← 全部指南

十六进制编码指南:把文字看清楚,而不是藏起来

需要判断「这段文字到底存了什么字节」时,十六进制是最直接的观察方式;但它只是一种写法,不是保护。

打开工具:十六进制编码器

什么时候该把文字摊成字节

同一段话在两个系统里显示不一样、接口报「非法字符」、配置里多了看不见的空格,这些问题的共同点是:肉眼看到的字符和实际存储的字节不是一回事。转成十六进制后,空格是 20、换行是 0a、制表符是 09,问题立刻现形。

另一个常见用途是对照协议文档。很多字段按字节定义,比如某个头部固定两字节、某个标志位占一个字节;把字符串转成字节串,再和文档逐字节比对,比盯着原文猜要可靠得多。

读结果时要盯住这三件事

第一,编码是 UTF-8,不是 UTF-16。一个英文字母占一个字节,一个常用汉字通常占三个字节,emoji 往往占四个字节。看到「中」变成 e4 b8 ad 不要意外,这正是 UTF-8 的定义,不是工具出错。

第二,每个字节固定两位。中间的单个空格只是分隔符,不属于数据;复制时把换行和多余空格带进去,解码端通常还能按空白切分容忍,但混进别的字符就会解错。第三,0x 前缀只是书写习惯,别把它当成内容。

它不是加密,也不适合存文件

十六进制没有密钥,任何人拿到都能还原,所以不能用它藏密码、藏接口地址或「保护」配置。它带来的只是可读性变化:体积翻倍,信息一点没少。真要保密,用加密;要放进 URL 或 JSON,用 Base64 更省空间。

另外,这个工具只处理文本。图片、压缩包、可执行文件请用 xxd、hexdump 这类命令行工具做十六进制转储,它们还会标出偏移量,方便定位。把几十兆的文件读进浏览器,页面会先卡住。

常见问题

为什么「中」是 e4 b8 ad?

因为工具按 UTF-8 编码:U+4E2D 落在三字节区间,编码结果就是这三个字节。换成 GBK 会得到两个字节,所以在不同编码之间对比十六进制,先确认双方用的是同一套编码。

十六进制和 Base64 有什么区别?

两者都能无损还原。十六进制把每个字节写成两个字符,体积是原文的两倍;Base64 用 64 个字符表示,体积约 1.33 倍,更适合塞进文本协议。可读性上十六进制更直观,体积上 Base64 更省。

能拿十六进制当加密吗?

不能。没有密钥、没有强度,谁都能一步还原。把它当加密,等于把密码写在便签背面。需要保密请用真正的加密工具,并妥善管理密钥本身。

相关工具:十六进制编码器