是否有任何 Linux 实用程序可以创建文件的纯二进制转储,反之亦然?

是否有任何 Linux 实用程序可以创建文件的纯二进制转储,反之亦然?

我想知道是否有任何 Linux 实用程序或过程可以生成普通的二进制转储并将其反转回原始文件(因为xxd能够通过-r参数执行此操作)?我已经尝试过xxd,它可以选择反转到原始文件,但它只打印普通的十六进制转储。

如果上述方法不可能,是否有任何实用程序可以将纯十六进制字符串(示例:)转换hx829jdxkdiei为纯二进制字符串。在 Windows 上有一些程序,如 010 Editor,但我找不到任何适用于命令行 linux 的程序。

答案1

如果您只想转储为十六进制,我会使用hexdump, 或xxd

但是,您提到了 010 Editor,这是一个十六进制编辑。 Linux 有很多十六进制编辑器。例如,参见Arch wiki 的这一部分, 或者这个维基百科页面

答案2

您始终可以使用perl

perl -ple 'BEGIN{$/=\8} $_=unpack("B*")' < file > file.dump

B将 0x1 8 位字节(八位字节)转储为00000001;替换为bget 10000000

撤销:

perl -pe '$_=pack("B*", $_)' < file.dump > file

例子:

$ printf %s hx829jdxkdiei | perl -ple 'BEGIN{$/=\8}$_=unpack("B*")'
0110100001111000001110000011001000111001011010100110010001111000
0110101101100100011010010110010101101001
$ printf %s hx829jdxkdiei | perl -ple 'BEGIN{$/=\8}$_=unpack("B*")' |
    perl -pe '$_=pack("B*", $_)'
hx829jdxkdiei

对于十六进制转储到二进制转储:

$ echo ff0aa0ff | perl -ple '$_=unpack("B*", pack("H*",$_))'
11111111000010101010000011111111
$ printf %s hx829jdxkdiei | xxd -p -c8 | perl -ple '$_=unpack("B*", pack("H*",$_))'
0110100001111000001110000011001000111001011010100110010001111000
0110101101100100011010010110010101101001

对于zsh,另请参见:

$ string=hx829jdxkdiei
$ set +o multibyte -o extendedglob
$ bin=${string//(#m)?/${(l[8][0])$(( [##2] ##$MATCH ))}}
$ print -r -- $bin
01101000011110000011100000110010001110010110101001100100011110000110101101100100011010010110010101101001
$ print ${bin//(#m)?(#c8)/${(#):-"2#$MATCH"}}
hx829jdxkdiei

在哪里

  • $(( ##x ))给出字符的值xwchar_t打开该选项的值multibyte,否则为字节值)。
  • $(( [##2] expression ))将算术表达式的结果展开为二进制(不带前缀2#)。
  • ${(l[8][0])param} left 用 0 将参数扩展填充到长度 8。
  • ${(#)param}输出其值存储在$param( 的相反$(( ##x )))中的字符。

相关内容