web-dev-qa-db-ja.com

Linuxコマンドを使用してテキストファイルをバイナリファイルに変換する方法

テキスト(文字列)形式のバイナリの16進コードがあります。 catやechoなどのLinuxコマンドを使用してバイナリファイルに変換するにはどうすればよいですか?

バイナリtest.binを作成するコマンドに続くコマンドを知っています。しかし、この16進コードが別の.txtファイルにある場合はどうでしょうか?テキストファイルの内容を「猫」にして「エコー」し、バイナリファイルを生成するにはどうすればよいですか?

# echo -e "\x00\x001" > test.bin

10
aMa

使用する xxd -r。 hexdumpをバイナリ表現に戻します。

ソース および ソース

Edit-pパラメーターも非常に便利です。 「プレーンな」16進数値を受け入れますが、空白と行の変更は無視します。

したがって、次のようなプレーンテキストダンプがある場合:

echo "0000 4865 6c6c 6f20 776f 726c 6421 0000" > text_dump

次の方法でバイナリに変換できます。

xxd -r -p text_dump > binary_dump

そして、次のようなもので有用な出力を取得します。

xxd binary_dump
23
1010

長いテキストまたはファイル内のテキストがある場合は、 binmake ツールを使用して、いくつかのバイナリデータをテキスト形式で記述し、バイナリファイル(またはstdoutへの出力)を生成することもできます。エンディアンネスと数値形式を変更し、コメントを受け入れます。

デフォルトの形式は16進数ですが、これに限定されません。

最初にgetとコンパイルbinmake

$ git clone https://github.com/dadadel/binmake
$ cd binmake
$ make

stdinstdoutを使用してパイプできます:

$ echo '32 decimal 32 61 %x20 %x61' | ./binmake | hexdump -C
00000000  32 20 3d 20 61                                    |2 = a|
00000005

またはファイルを使用します。テキストファイルを作成しますfile.txt

# an exemple of file description of binary data to generate
# set endianess to big-endian
big-endian

# default number is hexadecimal
00112233

# man can explicit a number type: %b means binary number
%b0100110111100000

# change endianess to little-endian
little-endian

# if no explicit, use default
44556677

# bytes are not concerned by endianess
88 99 aa bb

# change default to decimal
decimal

# following number is now decimal
0123

# strings are delimited by " or '
"this is some raw string"

# explicit hexa number starts with %x
%xff

バイナリファイルを生成しますfile.bin

$ ./binmake file.txt file.bin
$ hexdump file.bin -C
00000000  00 11 22 33 4d e0 77 66  55 44 88 99 aa bb 7b 74  |.."3M.wfUD....{t|
00000010  68 69 73 20 69 73 20 73  6f 6d 65 20 72 61 77 20  |his is some raw |
00000020  73 74 72 69 6e 67 ff                              |string.|
00000027
1
daouzli

xxdに加えて、パッケージ/コマンドodおよびhexdumpも確認する必要があります。すべて似ていますが、それぞれが希望するニーズに合わせて出力を調整できるようにするわずかに異なるオプションを提供します。例えば ​​hexdump -Cは、関連する[〜#〜] ascii [〜#〜]変換を伴う従来の16進ダンプです。

0
David C. Rankin