it-swarm.com.de

Wie konvertiert man eine Textdatei mithilfe von Linux-Befehlen in eine Binärdatei?

Ich habe einen Hex-Code eines binären Textformats (String). Wie konvertiere ich es mit Linux-Befehlen wie cat und echo in eine binäre Datei?

Ich kenne den Befehl mit dem Befehl zum Erstellen einer binären test.bin. Aber was ist, wenn sich dieser Hexcode in einer anderen TXT-Datei befindet? Wie kann ich den Inhalt einer Textdatei auf "Echo" setzen und eine Binärdatei generieren?

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

9
aMa

verwenden Sie xxd -r. Es gibt einen Hexdump in seine binäre Darstellung zurück.

source und source

Edit: Der -p-Parameter ist ebenfalls sehr nützlich. Es akzeptiert "normale" Hexadezimalwerte, ignoriert jedoch Leerraum- und Zeilenänderungen.

Wenn Sie also einen einfachen Textdump wie folgt haben:

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

Sie können es in binär konvertieren mit:

xxd -r -p text_dump > binary_dump

Dann erhalten Sie nützliche Ausgaben mit etwas wie:

xxd binary_dump
21
1010

Wenn Sie langen Text oder Text in einer Datei haben, können Sie auch das Tool binmake verwenden, mit dem Sie einige Textdaten im Textformat beschreiben und eine Binärdatei (oder eine Ausgabe in stdout) generieren können. Es erlaubt das Endianess und das Zahlenformat zu ändern und akzeptiert Kommentare.

Das Standardformat ist hexadezimal, jedoch nicht darauf beschränkt.

Holen und kompilieren Sie zuerst binmake:

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

Sie können es mit stdin und stdout leiten:

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

Oder benutze Dateien. Erstellen Sie also Ihre Textdatei 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

Generieren Sie Ihre Binärdatei 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

Zusätzlich zu xxd sollten Sie auch die Pakete/Befehle od und hexdump betrachten. Alle sind ähnlich, bieten jedoch leicht unterschiedliche Optionen, mit denen Sie die Ausgabe an Ihre gewünschten Bedürfnisse anpassen können. Zum Beispiel ist hexdump -C der traditionelle Hexdump mit zugehörigerASCII- Übersetzung.

0
David C. Rankin