Befehl oder Skript zum Lesen einer Binärdatei und zum Überspringen einiger Bytes alle X Bytes

Ich versuche, einen Android-Shell-Befehl zu finden, der eine Datei lesen kann, aber die Macht hat, zu überspringen, zum Beispiel 512 Bytes alle 1024 Bytes.

Existiert ein solcher Befehl und ist er für Android-Geräte verfügbar?

Ich habe mir die dd- Dokumentation angesehen , konnte aber nicht herausfinden, ob es möglich ist, dd für diesen Zweck zu verwenden. Sie können dd dazu bringen, Bytes am Anfang der Datei zu überspringen, Sie können X Bytes aus einer Datei lesen, aber ich sehe nicht, wie Sie die von mir beschriebene Funktion erhalten.

BEARBEITEN:

Für meinen Zweck sollte der Befehl/das Skript an stdout ausgegeben werden, und die Verarbeitung liest die Ausgabe wie einen Stream, sodass es nicht so etwas wie "eine Datei kategorisieren, verarbeiten, eine Datei kategorisieren" sein wird. Es ist wie "während wahr; eine Datei cat; fertig | Verarbeitung".

Die Liste der verfügbaren Befehle finden Sie hier: http://www.busybox.net/downloads/BusyBox.html

Antworten (1)

Sie sollten versuchen, dieses Bash-Skript zu verwenden, das ich für Sie geschrieben habe (benötigt busybox auf Ihrem Android):

Legen Sie das Skript in einer Datei namens script.bash ab (ändern Sie es mit Ihrem eigenen Pfad):

#!/system/xbin/bash
# sputnick 20120928 http://android.stackexchange.com/posts/30069

binfile=<THE PATH OF YOUR BIN FILE>
bytes=$(wc -c < $binfile)
c=0 count=0

while ((count < bytes - (1024+512) )); do
    dd 2>/dev/null if=$binfile bs=512 count=2 skip=$c
    printf '\n\n'
    ((count += 1024+512 ))
    ((c+=3))
done

Jetzt in einem Terminal auf Ihrem Computer (dies ist für Linux, passen Sie es an, wenn Sie Windows verwenden)

adb push script.bash /mnt/sdcard/script.bash
adb shell
bash
chmod +x /mnt/sdcard/script.bash
/mnt/sdcard/script.bash

bearbeiten

Dies ist, was das Skript in Ordnung macht :

dd 2>/dev/null if=/tmp/bin bs=512 count=2 skip=0
dd 2>/dev/null if=/tmp/bin bs=512 count=2 skip=3
dd 2>/dev/null if=/tmp/bin bs=512 count=2 skip=6
dd 2>/dev/null if=/tmp/bin bs=512 count=2 skip=9
(...)
Das sollte sicherlich funktionieren, aber ich sehe zwei Details, die für meine Zwecke verbessert werden könnten. Zuerst möchte ich, dass es auf stdout und nicht auf mehrere Dateien ausgegeben wird. Ich denke, Sie können das beheben, indem Sie einfach die Option entfernen. Die andere Sache ist, ich weiß nicht, ob das mehrmalige Aufrufen von dd einen Mehraufwand für das mehrmalige Öffnen/Schließen der Datei mit sich bringt, wodurch der Prozess weniger effizient wird, als er sein sollte.
Das Skript wurde an Ihre Bedürfnisse angepasst. Wenn Sie einen besseren Weg kennen, als dd mehrmals anzurufen, sagen Sie mir wie;)