我正在解决一个挑战,我发现一个没有文件扩展名的数据文件。该file
命令显示它是一个data file (application/octet-stream)
. 该hd
命令显示GNP。在最后一行。因此,如果我反转此文件,那么我将获得.PNG格式的文件,我到处搜索,但没有找到解释如何反转二进制文件内容的解决方案。
我正在解决一个挑战,我发现一个没有文件扩展名的数据文件。该file
命令显示它是一个data file (application/octet-stream)
. 该hd
命令显示GNP。在最后一行。因此,如果我反转此文件,那么我将获得.PNG格式的文件,我到处搜索,但没有找到解释如何反转二进制文件内容的解决方案。
使用
xxd
(来自vim
)和tac
(来自 GNU coreutils,也在tail -r
某些系统上):在
zsh
(唯一可以在内部处理二进制数据的 shell(除非您想考虑ksh93 的 base64 编码方法)):LC_ALL=C
: 字符是字节$mapfile[file.gnp]
:file.gnp
文件内容s::
:将字符串拆分为其字节组成部分Oa
:O
在a
该数组的 ray 下标上反向 rder使用 perl:
性能测试:
结果:
perl -0777 -F
也是最慢的。xxd
也是最慢的。注意:
diff
所有解决方案的运行时间应该相同,因为输出应该相同。这是使用
ksh93
. 我已将代码“放散”以使其更易于理解。我尝试了以下方法:
这个想法是使用任何字符作为分隔符来强制“tac”。我在二进制文件上尝试过,它似乎有效,但任何确认都将不胜感激。
主要优点是它不会将文件加载到内存中。