Umschalten der Byte-Reihenfolge von Binärdaten

8

Ich habe eine Binärdatei, die ich lese, wo einige 2-Byte-Werte in umgekehrter Byte-Reihenfolge (Little Endian?) gespeichert sind, zB

%Vor%

Das ursprüngliche Programm, das diese Werte erstellt hat, speichert sie intern als Kurzform. Diese Werte sollten entsprechen: 29, 19, 39, 59, 69, 49, 79. Ich versuche, diese Werte mit Python 2.6.5 zu lesen (obwohl dies wahrscheinlich auf viel älteren Systemen ausgeführt wird, zB 2.3 und 2.4) .

Ich habe versucht,

zu verwenden %Vor%

und natürlich sind alle Werte falsch:

%Vor%

Nachdem ich die Dokumentation von struct angeschaut habe, dachte ich, ich könnte etwas wie

verwenden %Vor%

Aber beim Testen habe ich nur

%Vor%

Wie kann ich diese Werte mit der richtigen Byte-Reihenfolge entpacken? Bin ich fest, in den zwei Bytes getrennt lesend, dann sie in den Python-Code wieder zusammensetzend?

    
pfyon 02.11.2011, 16:17
quelle

3 Antworten

9

Die Byte-Reihenfolge wird mit einem einzelnen Zeichen am Anfang der Formatzeichenfolge angegeben.

%Vor%     
Cat Plus Plus 02.11.2011, 16:23
quelle
3

Wie wäre es mit

?

>>> a='\x1d\x00\x13\x00\x27\x00\x3b\x00\x45\x00\x31\x00\x4f\x00'

>>> struct.unpack('<%dH' % (len(a) / 2), a)

(29, 19, 39, 59, 69, 49, 79) ?

Laut der Struktur -Dokumentation sieht es so aus, als müssten Sie < verwenden Spezifiziere Little-Endian.

    
Eric Rahmig 02.11.2011 16:45
quelle
0

Ich habe ein ähnliches Problem der umgekehrten Byte-Reihenfolge mit a.byteswap(True) gelöst, aber ich bin nicht sicher, ob dies die effizienteste Methode ist.

    
captain_M 13.12.2012 21:02
quelle

Tags und Links