Binary-File als Hex-Darstellung

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
maxxle
User
Beiträge: 12
Registriert: Dienstag 12. Juli 2005, 13:54

Sonntag 19. Oktober 2008, 21:48

Habe gerade etwas mit einem Binär-File, das ich unter C erstellt habe gespielt.
In das Bin-File habe ich ein C-Struct bestehend aus zwei Integern geschrieben.

Ich habs mit folgendem gemacht (aboslut Quickhack):

Code: Alles auswählen

#!/bin/python

import binascii;

myFile = open("test.bin", 'r');
a=1;

while a:
    a = myFile.read(1);
    b= binascii.hexlify(a);
    print b;

myFile.close();

Ziel war es, jedes Byte des Binär-Files in Hexadezimaler-Schreibweise einzeln darzustellen.
Wie würdet ihr soetwas zerlegen? Geht es noch einfacher?
Wie würdet ihr sowas in Perl zerlegen?
EyDu
User
Beiträge: 4871
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Sonntag 19. Oktober 2008, 22:07

Anweisungen in Python brauchst du nicht mit einem Semikolon abschließen, das ist vollkommen überflüssig.

Außerdem solltest du eine Datei, welche binärdaten enthält, mit "rb" öffnen und nicht nur mit "r". Zumindest unter Windows macht dies einen Unterschied.

Dein Programm kann man auch noch wesentlich kürzer fassen:

Code: Alles auswählen

import binascii

with open("test.bin", "rb") as fp:
    print binascii.hexlify(fp.read())
Dann steht zwar nicht mehr jedes Byte in einer neuen Zeile, das lässt sich aber leicht anpassen.
lunar

Sonntag 19. Oktober 2008, 22:16

Das "binascii"-Modul ist nicht nötig, es gibt einen Codec namens "hex", der zusammen mit der ".encode()"-Methode von Strings verwendet werden kann:

Code: Alles auswählen

with open('test.bin', 'rb') as stream:
    print stream.read().encode('hex')
Abhängig von der erwarteten Größe der Datei ist es allerdings mitunter nicht empfehlenswert, die gesamte Datei in den Speicher zu lesen.
maxxle
User
Beiträge: 12
Registriert: Dienstag 12. Juli 2005, 13:54

Sonntag 19. Oktober 2008, 23:09

Danke für die Antworten. Das mit Encode gefällt mir noch besser wie der "binascii"-import.
Werde mir binascii aber im Hinterkopf halten. Die eine oder andere Funktion aus diesem Paket kann durchaus nützlich sein.
Antworten