od -t x1 最稳妥,严格按原始字节流输出单字节十六进制;od -x 默认双字节小端易误读,xxd 适合混合视图但需注意列宽与分组逻辑。

直接用 od -t x1 或 xxd 就能看二进制内容,但输出格式、字节对齐、地址偏移这些细节不调好,看到的很可能不是你想要的“原始字节”。
用 od -t x1 看单字节十六进制最稳妥
很多人误以为 od -x 是看单字节十六进制,其实它默认是双字节(u2)小端显示,容易把 0x6162 错读成 “ab”,实际可能是两个独立字节 0x62 0x61(因为小端)。
-
od -t x1 file:每个字节单独输出为 2 位十六进制,顺序严格对应文件字节流 -
od -t x1 -A d file:地址用十进制(比默认八进制更直观) -
od -t x1 -j 0x100 -N 32 file:跳过前 256 字节,只看接下来 32 字节 - 别用
-x代替-t x1——除非你明确需要双字节整数解释
用 xxd 看十六进制+ASCII混合视图更直观
xxd 默认每行 16 字节,左侧地址、中间十六进制、右侧 ASCII(不可见字符用 .),适合快速扫读结构,但要注意它的列宽和分组逻辑。
-
xxd file:标准三栏视图,地址为十六进制,每行 16 字节 -
xxd -c 8 file:每行只显示 8 字节,避免长行折行干扰判断 -
xxd -p file:纯十六进制流(无空格/地址),适合复制粘贴进其他工具解析 -
xxd -r是反向转换命令,但仅适用于xxd原生输出格式;od输出不能直接喂给xxd -r
别忽略 LANG 和不可见字符的影响
环境变量会影响 od -c 和 xxd 右侧 ASCII 栏的显示行为——比如中文 UTF-8 字节序列在 od -c 下可能被截断或显示为 \344\273\245 这类转义,而 xxd 会原样保留字节并用 . 表示非打印字符。
- 运行
LANG=C od -c file可避免 locale 对字符解释的干扰 -
od -t x1 -c file能同时看到字节值和对应字符解释,但注意:同一行里-c的字符列与-t x1的字节列严格左对齐,可交叉验证 -
xxd不受LANG影响,ASCII 栏永远按字节值查 ASCII 表,UTF-8 多字节序列天然表现为多个.
什么时候该换工具?
od 和 xxd 都不擅长提取嵌入式字符串或解析结构化二进制(如 ELF、PNG)。它们只是“字节透镜”,不是解析器。
- 想快速找明文字符串?用
strings -n 4 file,比od -c扫屏高效得多 - 要看浮点数或 4 字节整数?
od -fF file(float)或od -i4 file(有符号 int32)比硬算十六进制靠谱 - 要编辑二进制?
xxd -r配合编辑器可行,但真正改字段建议用bless或hexer这类专用编辑器
真正难的不是选哪个命令,而是理解你看到的到底是“原始字节序列”,还是“按某种数据类型解释后的结果”——od -t x1 和 xxd 至少保证前者;一旦用了 -d、-f、-x,就得同步确认字节序、对齐、符号位这些隐含假设。











