是否有可能逆转 xxd 以从二进制文件获取原始文件

是否有可能逆转 xxd 以从二进制文件获取原始文件

我一直在使用它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

相关内容