web-dev-qa-db-fra.com

Comment convertir un fichier texte en fichier binaire en utilisant les commandes linux

J'ai le code hexadécimal d'un binaire au format texte (chaîne). Comment puis-je le convertir en un fichier binaire en utilisant les commandes linux telles que cat et echo?

Je connais la commande suivante avec créer un test.bin binaire. Mais que se passe-t-il si cet hexcode est dans un autre fichier .txt? Comment "chatter" le contenu du fichier texte pour "echo" et générer un fichier binaire?

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

9
aMa

utilisez xxd -r. il retourne un hexdump à sa représentation binaire.

source et source

Edit: le paramètre -p est également très utile. Il accepte les valeurs hexadécimales "simples", mais ignore les changements d'espaces et de lignes.

Donc, si vous avez un texte en clair comme celui-ci:

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

Vous pouvez le convertir en binaire avec:

xxd -r -p text_dump > binary_dump

Et puis obtenez une sortie utile avec quelque chose comme:

xxd binary_dump
21
1010

Si vous avez un texte long ou texte dans un fichier, vous pouvez également utiliser l'outil binmake qui vous permet de décrire au format texte des données binaires et de générer un fichier binaire (ou une sortie sur stdout). Il permet de changer les formats de fin et de nombre et accepte les commentaires.

Son format par défaut est hexadécimal mais ne se limite pas à cela.

Commencez par récupérer et compiler binmake:

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

Vous pouvez le diriger en utilisant stdin et stdout:

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

Ou utilisez des fichiers. Alors créez votre fichier texte 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

Générez votre fichier binaire 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

En plus de xxd, vous devriez également consulter les packages/commandes od et hexdump. Tous sont similaires, mais chacun fournit des options légèrement différentes qui vous permettront d'adapter la sortie à vos besoins souhaités. Par exemple, hexdump -C est la copie hexadécimale traditionnelle à laquelle est associée la translationASCII.

0
David C. Rankin