一般的なバイナリダンプを生成し、それを元のファイルに戻すことができる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
(B
0x1 8ビットバイト(オクテット)ダンプ; get00000001
に置き換えます)b
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
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 ))
値を文字単位で指定しますx
(wchar_t
このオプションがオンの場合は値multibyte
、それ以外の場合はバイト単位の値)。$(( [##2] expression ))
算術式の結果をバイナリ(プレフィックスなし2#
)に拡張します。${(l[8][0])param}
l
eft は引数を 0 から長さ 8 に拡張します。${(#)param}
$param
(の逆)に値が格納されている文字を出力します$(( ##x ))
。