You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何xxd -r会额外添加空字节?od与xxd反向操作问题

为什么用xxd -r反向od -tx1的输出会多出空字节?

问题描述

我需要在没有hexdump或base64工具的系统上反向od命令的输出,测试时执行:

echo TEST | od -tx1 | xxd -r

单独执行echo TEST | od -tx1得到的输出是:

0000000 54 45 53 54 0a
0000005

但经xxd -r反向后再用od查看,结果多出三个空字节:

0000000 54 45 53 54 0a 00 00 00
0000010

请问xxd -r为何会添加这些空字节?

原因分析

核心问题在于**od和xxd的地址格式不兼容**,再加上xxd -r的特殊处理逻辑:

  1. od默认输出的地址是八进制:你看到的0000005是八进制地址,对应十进制的5,也就是TEST\n这5个字节的结束偏移量。
  2. xxd -r默认解析地址为十六进制:当xxd -r处理od输出的第二行0000005时,会把这个字符串当成十六进制的0x5(同样对应十进制5)。

按道理,此时输出的字节流长度已经是5,地址5等于当前长度,xxd -r本应不做操作,但实际多出3个空字节的原因是:xxd -r并非为适配od的输出设计——od的纯地址行仅标记偏移量,没有后续数据,而xxd -r在处理这种无数据的地址行时,会错误地将输出对齐到8字节的边界,所以从十进制5填充到8,就多出了3个空字节。

解决方法

要正确反向od -tx1的输出,需要去掉od输出中的地址信息,让xxd -r只处理纯十六进制数据:

# 方法1:用od的-An参数直接去掉地址输出
echo TEST | od -tx1 -An | xxd -r -p

# 方法2:用sed过滤掉纯地址行和每行的地址前缀
echo TEST | od -tx1 | sed '/^[0-7]*$/d; s/^[0-7]* //' | xxd -r -p

这两种方法都会得到正确的原始数据,不会出现多余的空字节。

内容的提问来源于stack exchange,提问作者Bowi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:23:04