使用方法
- 输入框默认已经填好
Hi 中,共 6 字节。改任意内容立即重算,光标停在输入框里按 Ctrl+Enter(Mac 上 Cmd+Enter)同样触发;单独的 Enter 留给换行。 - 「显示 ASCII 列」默认勾选,对应 hexdump -C 右侧的
|...|;取消勾选后只保留十六进制区,行尾没有竖线,字节区宽度不变。 - 「最多显示字节数」默认 4096,范围 1 到 4096。粘贴超长内容时只 dump 前 N 字节,结果区末尾会多出一行截断说明,写明输入总字节数与上限,不静默丢弃。
- 结果区第一行是主结果(总字节、总行数、可打印与非打印计数),下面是完整 hexdump 与统计明细,等宽字体显示,可以直接整段复制。
- 工具区下方是 16 行字节区间速查表,最后一列是当前输入落在该区间的字节数,默认显示 12 行,点「加载更多」展开余下 4 行,点「导出 CSV」存成带字节序标记的文件。
- 「复制结果」复制 hexdump 与统计全文;「复制魔术数表」复制正文里那张常见文件头表,制表符分隔,可直接粘进表格软件。
- 每行固定 16 字节:N 字节的行数是 N ÷ 16 向上取整,16 字节 1 行、17 字节 2 行、256 字节 16 行;最后一行不足 16 字节时用空格补齐,ASCII 列只印实际存在的字节。
- 输入框被清空时点「开始转换」会自动填回示例;本页不解析文件、不识别编码,只把框里的字符按 UTF-8 变成字节。
这个十六进制查看器能解决什么问题
排查数据时最常听到的一句话是「你这文件头不对」。文件头是二进制,肉眼只能看个轮廓;十六进制查看器把每个字节摊成两字符一组的十六进制,再配一列 ASCII,头四个字节是不是 89 50 4E 47 一眼可辨。本站这一页的名称「十六进制查看器」,做的就是按 hexdump -C 形制把任意文本摊开,偏移、分组、点号全部对齐事实标准。
第一类是核对文本编码。同一个「中」字,GBK 编码是 D6 D0,UTF-8 是 E4 B8 AD,UTF-16 大端是 4E 2D。看到 e4 b8 ad 就知道是 UTF-8;看到两个字节且都落在 80–9F 区间,多半是 Windows-1252 或 Latin-1 的老数据。编码纠纷不用猜,dump 一次就有结论。
第二类是给二进制协议与文件头做人工比对。调试接口返回、校验下载的文件、确认一段 base64 解码后的内容,都可以先粘进来看字节数与头尾。本页按字节不按字符计数,所以「6 个字符」与「6 个字节」的差别会直接显示在统计行里。
第三类是教学与排错。讲 UTF-8 变长编码时,把 Hi 中 与 Hello 中 分别 dump 一次,能看到中文从 1 个字符变成 3 个字节、后续偏移整体后移。手写 UTF-8 编码函数只靠 charCodeAt 与位运算,沙箱与老浏览器里同样跑得动,不依赖 TextEncoder。
计算原理与变量说明
输入先经过手写的 utf8() 函数变成字节数组:码位小于 0x80 的直接 1 字节;小于 0x800 的拆成 2 字节(110xxxxx 10xxxxxx);代理对先合成 0x10000 以上的码位再拆 4 字节;其余落在 U+0800 以上的按 3 字节(1110xxxx 10xxxxxx 10xxxxxx)。所以「中」(U+4E2D)落为 E4 B8 AD,Hello 五个字母各 1 字节。
| 码位区间 | 字节数 | 引导字节 | 延续字节 | 例 |
|---|---|---|---|---|
| U+0000 – U+007F | 1 | — | — | A = 41 |
| U+0080 – U+07FF | 2 | C2–DF | 80–BF | é = C3 A9 |
| U+0800 – U+FFFF | 3 | E0–EF | 80–BF | 中 = E4 B8 AD |
| U+10000 – U+10FFFF | 4 | F0–F4 | 80–BF | 😀 = F0 9F 98 80 |
按字节不按字符。UTF-8 是变长编码:ASCII 1 字节、中文与日文 3 字节、emoji 4 字节。所以「6 个字符」在内存里是 6 个字节这件事只对纯英文成立;Hi 中 是 3 个字符却占 6 字节。字符串的 length 属性数的是 UTF-16 码元,一个 emoji 在其中算 2,与字节数又差一层,这也是本页统计行单独给出字节数的原因。
偏移量是字节偏移,不是字符偏移。第 1 行覆盖字节 0 到 15,偏移写作 00000000;第 2 行从 00000010 开始,这个 10 是十六进制,等于十进制 16,是最容易看错的地方。第 3 行是 00000020(十进制 32),偏移位数固定 8 位小写,不足补零,不随字节总数变化。
hexdump -C 的 -C 是 canonical 形制。8 位小写十六进制偏移、两个空格、16 个字节各两位小写十六进制、第 8 字节之后多一个空格把字节区分成两组、然后是 | + ASCII 列 + |,ASCII 列只印 0x20 到 0x7E,其余显示点。这是事实标准;xxd 默认偏移后面是冒号、字节按 2 个一组四个十六进制排,形制不同,不要两种输出直接对比。
ASCII 列里的三个点是正常的。e4、b8、ad 三个字节都落在 0x80–0xBF 的延续区,不在可打印区间内,所以各显示一个点;这不是乱码,是 UTF-8 多字节字符的固有表现。文件头魔术数(89 50 4E 47 = PNG、FF D8 FF = JPEG、25 50 44 46 = %PDF)是二进制排障的入口,下方对照表列了 16 种常见文件头。
完整示例(数值仅作演示)
默认一组:输入 Hi 中、ASCII 列开启、上限 4096。输出一行 00000000 48 69 20 e4 b8 ad |Hi ...|,统计为总字节 6、总行 1、可打印 3(H、i、空格)、非打印 3(e4、b8、ad)。
对照一组:输入 Hello 中 得 9 字节,仍是 1 行,第 8 字节 b8 之后出现分组用的双空格;输入 17 个字符 abcdefghijklmnopq 得 2 行,第 2 行偏移 00000010,只含字节 71 一个。两组都能用页面自己的 utf8() 与行数公式复算。
边界一组:输入 中 得 3 字节 1 行,ASCII 列是三个点;输入 emoji 😀 得 4 字节 1 行,十六进制为 f0 9f 98 80;把上限改成 2,Hi 中 只显示前 2 字节(48 69),结果区末尾多一行截断说明。
文件头魔术数与字节区间对照表
下表列出常见文件的前几个字节。二进制排障的第一步就是把文件头 dump 出来对这张表:对得上是什么格式,对不上就说明文件损坏或被截断。「复制魔术数表」按钮复制的就是这张表。
| 格式 | 魔术数字节(十六进制) | ASCII 预览 | 说明 |
|---|---|---|---|
| PNG | 89 50 4E 47 0D 0A 1A 0A | .PNG.... | 8 字节定长,含 CR LF 与两个 1A |
| JPEG | FF D8 FF | ... | SOI 标记,后跟 E0/DB 等段标记 |
| GIF | 47 49 46 38 | GIF8 | 第 5 字节区分 87a 与 89a |
| 25 50 44 46 | 后接版本号如 1.7 | ||
| ZIP | 50 4B 03 04 | PK.. | PK 后跟 03 04 为本地文件头 |
| GZIP | 1F 8B 08 | ... | RFC 1952,第三字节固定 08 |
| ELF | 7F 45 4C 46 | .ELF | Linux 可执行文件 |
| Java class | CA FE BA BE | .... | 咖啡馆组,JVM 识别 |
| SQLite | 53 51 4C 69 74 65 | SQLite | 后接 format 3 与空字节 |
| BMP | 42 4D | BM | Windows 位图 |
| MP3(ID3) | 49 44 33 | ID3 | 带标签的 MP3;裸帧是 FF FB 或 FF F3 |
| WASM | 00 61 73 6D | .asm | WebAssembly 二进制 |
| RAR | 52 61 72 21 1A 07 | Rar!.. | 末字节 00 为 RAR4,01 为 RAR5 |
| ICO | 00 00 01 00 | .... | Windows 图标 |
| OLE2(doc/xls/ppt) | D0 CF 11 E0 A1 B1 1A E1 | ........ | 旧版 Office 复合文档 |
| WebP | 52 49 46 46 … 57 45 42 50 | RIFF..WEBP | 偏移 0 是 RIFF,偏移 8 才是 WEBP |
第二张表把字节按区间归类,工具区里那张速查表的最后一列会实时数出当前输入落在各区间的字节数:00–1F 是控制字符,20–7E 是可打印 ASCII,7F 是 DEL,80–9F 在 Windows-1252 里另有映射而 UTF-8 不会单独出现,A0–BF 是 UTF-8 延续字节,C0–DF 是 2 字节引导,E0–EF 是 3 字节引导(汉字集中在这里),F0–F7 是 4 字节引导,F8 以上在 UTF-8 中是非法字节。
结果边界、舍入与适用说明
- 输入框被清空时点「开始转换」会自动填回示例 Hi 中,不会输出一份空 dump;想看纯空白的效果,可以只敲一个空格。
- 最多显示字节数留空、写成小数或超出 1 到 4096 时分别给出对应提示,不自动取整也不套默认值。
- 超出上限的内容只显示前 N 字节,结果区末尾多一行截断说明,写明输入总字节数与上限,不静默丢弃。
- 十六进制区每个字节固定两位小写,不足补零;偏移量固定 8 位小写同样补零,不随字节数变化,第 2 行永远是 00000010。
- 可打印只数 0x20 到 0x7E:空格算可打印,制表符与换行不算,所以含 Tab 的输入可打印数会比肉眼看到的少。
- 本页不解析文件、不识别编码,只按 UTF-8 把字符变成字节;粘贴一段 Latin-1 文本也会被按 UTF-8 处理,结果可能与原文件不同。
- 页面不联网、不写本地存储,输入内容只用于本次计算;复制与导出都在本地完成,导出的 CSV 带字节序标记,Excel 打开不乱码。
- 单次上限 4096 字节是为了把结果区控制在 256 行以内;要看更大的文件请用命令行 hexdump -C 或专业十六进制编辑器。
常见问题
为什么「中」是三个字节?
「中」的码位是 U+4E2D,落在 U+0800–U+FFFF 区间,UTF-8 用 3 字节编码:E4 B8 AD。首字节 E4 在 E0–EF 引导段,后两字节在 80–BF 延续段,所以 ASCII 列显示三个点。
偏移量 00000010 是十进制几?
十六进制 10 等于十进制 16。每行 16 字节,第 2 行从第 17 个字节开始,偏移写作 00000010;第 3 行是 00000020,即十进制 32。
ASCII 列为什么显示点?
只印 0x20 到 0x7E,其余显示点。e4 b8 ad 都不可打印,所以是三个点;这不是乱码,是 UTF-8 多字节字符的固有表现。
第 8 字节后为什么多一个空格?
hexdump -C 的 canonical 形制把 16 个字节分成两组各 8 个,组间多一个空格,便于肉眼定位第几个字节。取消勾选 ASCII 列时这个分组空格仍然保留。
和 xxd 有什么区别?
xxd 默认偏移后面是冒号、字节按 2 个一组四个十六进制排列;hexdump -C 是每位后一个空格、第 8 字节后多一个分组空格。形制不同,输出不要直接对比。
为什么不用 TextEncoder?
沙箱环境与部分老浏览器没有 TextEncoder。手写的 utf8() 只靠 charCodeAt 与位运算,任何能跑 JavaScript 的地方结果都一致,也不引入额外依赖。
emoji 为什么是 4 字节?
U+1F600 超出 U+FFFF,UTF-16 里是一个代理对,UTF-8 用 4 字节 F0 9F 98 80。页面按码位迭代,代理对不会被拆成两个字符,也不会多算字节数。
输入的数据会上传到服务器吗?
不会。编码、统计与导出都在本页完成,没有发起任何网络请求,刷新页面后输入即恢复默认值。
相关工具
- 十六进制转二进制转换器:把 48 69 这样的十六进制串逐位拆成二进制,核对字节值时用。
- 文本转十六进制转换器:只要十六进制串、不要 hexdump 形制时用这一页。
- IP转二进制转换器:把点分十进制的 IP 逐段折成二进制,网络排障常与十六进制对照着看。
- 十六进制转十进制转换器:e4 是十进几、0x7F 是十进几,单字节速查。
- 二进制转十六进制转换器:反向折算,把 01001000 收成 48。
- 开发者工具:查看全部编解码工具。