我一直在使用它xxd
来创建文件的十六进制表示(任何文件,如 .jpg、.docx、.zip 等),像这样,..
$ xxd -p original_file.zip > hexa_format.txt
并逆转
$ xxd -r -p hexa_format.txt > original_file.zip
如果有人认为这不是正确的方法,请纠正我。无论如何这不是我的问题。现在我必须将它们转换为二进制而不是十六进制。如果我正确的话,命令如下。
$ xxd -p -b original_file.zip > binary_format.txt
我的问题是,
我如何将其从上述命令创建的二进制文件(binary_format.txt)恢复回原始文件。xxd 的手册页说无法做到这一点(在最后一行)。
-b | -bits
Switch to bits (binary digits) dump, rather than hexdump. This
option writes octets as eight digits "1"s and "0"s instead of a
normal hexadecimal dump. Each line is preceded by a line number
in hexadecimal and followed by an ascii (or ebcdic) representa‐
tion. The command line switches -r, -p, -i do not work with this
mode.
如果这无法完成,是否有其他命令可以完成,例如通过管道传输多个命令。
答案1
您必须编写自己的二进制到十六进制函数......
cut -f2-8 -d' ' infile | tr -d '\n' | tr ' ' '\n' | while read l;
do
echo -n $(bin_to_hex($l)) >> outfile
(( ++n ))
(( n % 60 == 0)) && echo "" >> outfile
done
这应该输出与 相同的格式,-p
然后可以通过 运行-r
。如果你阅读 的手册页,xxd
你会发现没有-r
。-b
你在问题中包含的摘录中就是这样说的。
答案2
你改变了文件的结构,所以你不能轻易做到这一点。也许像这样的方法可以有所帮助(但你会丢失换行符:
awk '{printf $8}' binary_format.txt >out_file