ファイルの純粋なバイナリダンプを生成したり、その逆に生成したりできるLinuxユーティリティはありますか?

ファイルの純粋なバイナリダンプを生成したり、その逆に生成したりできるLinuxユーティリティはありますか?

一般的なバイナリダンプを生成し、それを元のファイルに戻すことができるLinuxユーティリティまたは手順があるかどうか疑問に思います(パラメータを介してxxdこれ-rを実行できるため)試してみましたが、xxd元のファイルに戻すオプションがありますが、通常の16進ダンプのみを印刷します。

上記の方法が不可能な場合は、純粋な16進文字列(たとえば)をhx829jdxkdiei純粋なバイナリ文字列に変換するユーティリティがありますか? Windowsには010 Editorなどのいくつかのプログラムがありますが、コマンドラインLinux用のプログラムは見つかりません。

答え1

16進数でダンプしたい場合は、hexdumpまたはを使用してくださいxxd

ところで、16進数の010 Editorに言及しました。編集する。 Linuxには多くの16進エディタがあります。例えばArch Wikiのこのセクションまたはこのウィキペディアページ

答え2

いつでも以下を使用できますperl

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

B0x1 8ビットバイト(オクテット)ダンプ; get00000001に置き換えます)b10000000

キャンセル:

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

16進ダンプからバイナリダンプへの場合:

$ 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 ))

関連情報