Ich versuche, zwei Bytes in der Binärdatei zu finden, dann den Wert dieser beiden Bytes zu erhöhen und sie in der Datei zu ersetzen. Diese beiden Bytes befinden sich an den Positionen 0x82-0x83. Im Moment habe ich diese beiden Bytes erfolgreich damit extrahiert:
#!/usr/bin/env bash
BYTES=$(tail -c +131 "$1" | head -c 2)
Diese Bytes haben den Wert : 1B 1F
. Ich stecke fest mit:
- Wie konvertiere ich Bytes in Ganzzahlen? Es sollte
6943
dezimal sein. - Anhängen / Echo von Binärdaten an eine Datei
- So schreiben Sie mehr Bytes in die Datei an den Positionen 0x82-0x83. Ich könnte es gebrauchen
head -c 130 original.bin >> new_file.bin && magic_command_writing_bytes_to_file >> new_file.bin && tail -c +133 original.bin
, aber es muss einen besseren Weg geben.
Ich könnte das in PHP machen, es sollte einfacher sein, aber ich bin interessiert, wie man das in Bash macht.
text-processing
conversion
replace
binary
piotrekkr
quelle
quelle
\x
In Zeile zwei Ihres Beispielcodes fehlt ein Fehler . Es sollte seinecho -n $'\x1b\x1f' >> test.txt
.printf "%d" 0x1B1F
wird den job gut machen, um dein6943
ergebnis zu erhalten ; Von da an können Sieprintf "%d" $(xxd -u -ps -l 2 -s 12 test.txt)
stattdessen eine wesentlich intelligentere Linie verwenden, die Sie nicht mehr benötigenbc
.Oh, das tut mir leid. Diese Antwort ist veraltet, da ich dachte, Sie haben hexadezimale Werte als ASCII in Ihre Datei geschrieben.
Sie können die Hex-Zahlen über in ein Dezimalsystem konvertieren
printf "%d" 0x1B1F
.Wenn Sie die Bytes in einer Variablen gespeichert haben, erhalten
BYTES=1B1F
Sie das Ergebnis mitprintf "%d" 0x$BYTES
.Also, wenn Sie die Anzahl erhöhen möchten, tun Sie
Dann konvertieren Sie es zurück
quelle