2016-07-20 14 views
1

Ich benutze die Modul-Bitstring, um eine 24-Byte-Grenze-Datei zu entpacken. Ich habe keine Kontrolle über die Eingabedatei. Die Standardinterpretation des Moduls ist anscheinend Big-Endian, was beim Entpacken von Datentypen wie int oder float leicht zu beheben ist, aber einige Daten, die ich als Hexwerte darstellen möchte. Mit den entpackten Hex-Werten wird die falsche Byte-Reihenfolge angezeigt. Gibt es eine Lösung dafür? Beispiel Eingabe: D806 gewünschte Ausgabe: 06D8ändern Ende des Hex in Bitstring entpacken

from bitstring import ConstBitStream 
fp = ConstBitStream(filename="testfile.bin") 
firstChunk = fp.read(2*8) 
data=firstChunk.unpack('hex:16') 
print(data) 

Antwort

0

Sie gewöhnlichen Python auf einer Little-Endian-Integer-Interpretation Formatierung nutzen könnten.

Eher als ein read dann unpack Sie können auch beide zusammen tun:

print('{:0>4X}'.format(fp.read('uintle:16'))) 

Dieses liest dann nächsten 16 Bits aus dem Strom, interpretiert sie als eine nicht signierte Little-Endian integer formatiert sie dann als vier Zeichen von hexadezimal, rechtsbündig und mit Nullen aufgefüllt.