为什么 xxd 添加字符?

Why does xxd add chars?

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

我是这样做的(当然,实际上,编码是在"small"系统上进行的,解码是在我的工作站上完成的,但是为了测试它,我尝试了整个过程第一行):

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

您得到这三个 nul 字节是因为 xxd -r 尝试解析与预期格式不同的输入但失败了。 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 的输出中删除额外的行时,它们怎么不存在了?不要混合和匹配不兼容的数据格式。

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

> 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

宾果!注意字节前面的额外“”。好像没有效果。