为什么xxd添加字符?

时间:2019-07-19 08:16:02

标签: bash xxd od

我正在尝试从没有odhexdump工具的系统中撤消base64命令。

我这样做是这样的(当然,实际上,编码是在“小型”系统上进行的,解码是在我的工作站上完成的,但是为了测试它,我首先尝试在一行中进行整体测试):

echo TEST | od -tx1 | xxd -r

当然,echo TEST只是例如的占位符。 cat test.bmp或其他任何内容。

> echo TEST
TEST

> echo TEST | od -tx1
0000000 54 45 53 54 0a
0000005 

> echo TEST | od -tx1 | xxd -r
TEST

看起来正确,但这是不同的,正如我们在这里看到的是否再次将其赋予od一样:

> echo TEST | od -tx1 | xxd -r | od -tx1
0000000 54 45 53 54 0a 00 00 00
0000010 

为什么xxd -r添加那些00

2 个答案:

答案 0 :(得分:2)

由于xxd -r尝试并且未能解析格式与期望格式不同的输入,因此得到了这三个nul字节。 od -tx1添加了一个带偏移但没有数据字节的额外行。加上xxd中的偏移量后面有一个冒号,并以不同的宽度进行打印,并显示可打印的字节以及十六进制转储,并且可能在不同的基数中。与xxd配合使用,结果会增加多余的字节。

示例:

$ echo TEST | xxd
00000000: 5445 5354 0a                             TEST.
$ echo TEST | xxd | xxd -r
TEST
$ echo TEST | xxd | xxd -r | xxd    
00000000: 5445 5354 0a                             TEST.
$ echo TEST | xxd | xxd -r | od -tx1
0000000 54 45 53 54 0a
0000005
$ echo TEST | od -tx1 | head -1 | xxd -r | od -tx1 
0000000 54 45 53 54 0a
0000005

看看给xxd -r期望的xxd样式输入时它们不出现吗?当您从od的输出中删去多余的行时,它们又如何不存在?不要混合和匹配不兼容的数据格式。

答案 1 :(得分:0)

如果我完全消除偏移量,那似乎可以工作:

> echo TEST | od -tx1 -An
 54 45 53 54 0a
> echo TEST | od -tx1 -An | xxd -r -p
TEST
> echo TEST | od -tx1 -An | xxd -r -p | od -tx1 -An
 54 45 53 54 0a

宾果!请注意字节前面的多余“”。似乎没有效果。