GNU/Linux >> Tutoriels Linux >  >> Linux

Comment écrire un entier dans un fichier binaire à l'aide de Bash ?

Voici ce que j'ai pu trouver :

int=65534
printf "0: %.8x" $int | xxd -r -g0 >>file

Maintenant, en fonction de l'endianité, vous voudrez peut-être échanger l'ordre des octets :

printf "0: %.8x" $int | sed -E 's/0: (..)(..)(..)(..)/0: \4\3\2\1/' | xxd -r -g0 >>file

Exemple (décodé, donc c'est visible) :

printf "0: %.8x" 65534 | sed -E 's/0: (..)(..)(..)(..)/0: \4\3\2\1/' | xxd -r -g0 | xxd
0000000: feff 0000                                ....

Ceci est pour non signé int, si l'int est signé et la valeur est négative il faut calculer le complément à deux. Mathématiques simples.


Vous pouvez utiliser la fonction suivante pour convertir une valeur numérique en son caractère correspondant :

chr() {
  printf \\$(printf '%03o' $1)
}

Vous devez convertir les valeurs d'octets individuellement, les unes après les autres dans le bon ordre (endianess) pour la machine/architecture que vous utilisez. Donc je suppose qu'un peu d'utilisation d'un autre langage de script prenant en charge la sortie binaire ferait le mieux l'affaire.


Voyez si cela fonctionne pour vous

perl -e "print pack('L',`stat -c %s in.txt`)">>out.bin 

Linux
  1. Comment remplacer les espaces dans les noms de fichiers à l'aide d'un script bash

  2. Comment parser un fichier CSV dans Bash ?

  3. Comment lire l'avant-dernière ligne d'un fichier avec Bash ?

  4. Comment écrire une chaîne de plusieurs lignes en utilisant Bash avec des variables ?

  5. Comment extraire la partie texte d'un fichier binaire sous linux/bash ?

Comment écrire un script bash avec des exemples

Bash :Écrire dans un fichier

Comment lire un fichier ligne par ligne dans Bash

Comment changer automatiquement l'arrière-plan de GNOME par intervalles à l'aide de BASH

Comment :une introduction à l'utilisation de Git

Tutoriel Unix Sed :comment écrire dans un fichier à l'aide de Sed