GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie schreibe ich mit Bash Integer in eine Binärdatei?

Folgendes könnte mir einfallen:

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

Je nach Endianness möchten Sie nun vielleicht die Byte-Reihenfolge tauschen:

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

Beispiel (dekodiert, also sichtbar):

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

Dies ist für unsigned int, wenn int signiert und ist der Wert ist negativ Sie müssen das Zweierkomplement berechnen. Einfache Mathematik.


Sie können die folgende Funktion verwenden, um einen numerischen WERT in das entsprechende Zeichen umzuwandeln:

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

Sie müssen die Byte-Werte einzeln nacheinander in der richtigen Reihenfolge (Endianess) für die von Ihnen verwendete Maschine/Architektur konvertieren. Ich schätze also, ein wenig Verwendung einer anderen Skriptsprache, die binäre Ausgabe unterstützt, würde die Aufgabe am besten erfüllen.


Sehen Sie, ob dies für Sie funktioniert

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

Linux
  1. Wie schreibe ich eine Schleife in Bash?

  2. Wie schreibe ich Nicht-ASCII-Zeichen mit Echo?

  3. Wie schreibe ich stderr in eine Datei, während ich tee mit einer Pipe verwende?

  4. So ersetzen Sie Leerzeichen in Dateinamen mit einem Bash-Skript

  5. Wie extrahiert man den Textteil einer Binärdatei in Linux/Bash?

So schreiben Sie ein Bash-Skript mit Beispielen

Bash:In Datei schreiben

So lesen Sie eine Datei Zeile für Zeile in Bash

So ändern Sie den GNOME-Hintergrund automatisch in Intervallen mit BASH

Gewusst wie:Eine Einführung in die Verwendung von Git

Unix Sed Tutorial:So schreiben Sie mit Sed in eine Datei