我正在尝试从没有od
或hexdump
工具的系统中撤消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
?
答案 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
宾果!请注意字节前面的多余“”。似乎没有效果。