如何在Linux中使用bash创建二进制文件的未修改的十六进制转储?od和hexdump命令都在转储中插入空格,这是不理想的。

有没有一种方法来简单地写一个长字符串与所有十六进制字符,负空格或换行在输出?


当前回答

xxd -p file

或者如果你想把它都写在一行上:

xxd -p file | tr -d '\n'

其他回答

你可以使用Python来实现这个目的:

python -c "print(open('file.bin','rb').read().hex())"

...file.bin是你的文件名。

解释:

以rb(读二进制)模式打开file.bin。 读取内容(作为字节对象返回)。 使用bytes方法.hex(),它返回不带空格或新行的十六进制转储。 打印输出。

Perl一行程序:

perl -e 'local $/; print unpack "H*", <>' file

这似乎取决于od版本的细节。在OSX上,使用这个:

od -t x1 -An file |tr -d '\n '

(这是打印为十六进制字节类型,没有地址。当然,之后还会删除空白。)

格式字符串可以使hexdump的行为完全按照你想要的那样(没有空格,一个字节一个字节):

hexdump -ve '1/1 "%.2x"'

1/1表示“每种格式应用一次并占用一个字节”,而“%。2x"是实际的格式字符串,就像printf一样。在本例中:2个字符的十六进制数,如果较短则前导为零。

其他答案更可取,但对于纯Bash解决方案,我在这里修改了答案中的脚本,以便能够输出表示文件内容的连续十六进制字符流。(它的正常模式是模拟hexdump -C。)