我正在尝试将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要添加那些00s?
发布于 2019-07-19 10:35:45
如果我完全去掉这些偏移量,这似乎是可行的:
> 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对啰!注意字节前面的额外“”。它似乎没有效果。
发布于 2019-07-19 09:03:04
您得到这三个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的输出中剪除额外的一行时,它们是如何不存在的呢?不要混合和匹配不兼容的数据格式。
https://stackoverflow.com/questions/57108284
复制相似问题