如何获取 Unix/Linux 中任何文件的纯(原始)二进制转储?

如何获取 Unix/Linux 中任何文件的纯(原始)二进制转储?

我在 Stack Exchange 社区上读过许多类似的问题,但没有一个解决“干净”的二进制转储。我已经使用:xxdsed组合来尝试从任何给定文件中获取干净的二进制转储。

让我解释一下我在说什么。您可能已经看过“xxd -p”的输出,它看起来像这样:

f4d37fd532171a4a3445be1bb03e7d6b75f3871ffee937aebc9eb2c9417f
f4e2fc8516e0a60a2c7e83c6a14c1a5e1b1e3f2ab9e12904cbd18aa2a4b9
f493d317c7a3ce71b7ab99fad4b64431d34866ced4d1f3e3f38136860009
fd08800c90491c8f7230d8b07936c4c0c29d2d12b138cdb2c544be9cc9fa
0e79d66faf375737966b67e7c7bf7efcf1703616a4643193d9aaafd63215
cf09a6e3e152bd01e9696b79f5faa5edd9f9b05628fdd9f77ee0dae1c5e8
dc2351d59693d84abac088cc4cd72916b5499830e4482e214bda0892f38c
60e9856fa111172a529222a7905e20b3c272a5b25c6fec9fbe386bb7f6cf

没有行号,没有相应的 ASCII,什么都没有。只是普通的旧字节集合。这就是我想要的东西,只是我需要二进制文件。

有两种选择:我可以首先获得一个普通的 xxd 十六进制转储,如上面所示,然后进行转换到二进制文件,或者 bash 中可能有一些我不知道的工具或实用程序可以做到这一点。

这就是我想要的:二进制转储如下所示:

001101100011010100110110001100010011100001100001
011000010011000000111001011001000011010100110010
001101000011001101100001011000110110010100110000
001100100110010001100001001100000011010100110011
001110000110011000111001011000100110000100110010
011001010110010000110011001100010110001100001010

只要我从任何文件中获得干净的纯二进制转储,上述任何内容对我来说都很好。所以,我的问题是如何获得它——没有任何换行符、空格、行号或什么都没有?

答案1

xxd具有,cut和 的实用解决方案tr

xxd -b -c1 file | cut -d" " -f2 | tr -d "\n"

答案2

Perl 解决方案:

perl -ne 'use bytes; while ($a=substr $_,0,1,"") {printf "%08b\n", ord $a}'

去除\n一张长连印中的所有内容。

相关内容