繁体   English   中英

为什么xxd添加字符?

[英]Why does xxd add chars?

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

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

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秒相加?

由于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的输出中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

答对了! 请注意字节前面的多余“”。 似乎没有作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM