Reihenfolge der Byte-Reihenfolge in Hex-String (Python)

7

Ich möchte einen kleinen Formatierer in Python bauen, der mir den numerischen Wert zurückgibt Werte, die in Zeilen von Hex-Strings eingebettet sind.

Es ist ein zentraler Teil meines Formatierungsprogramms und sollte schnell verständlich sein formatiere mehr als 100 Zeilen / Sek. (jede Zeile ungefähr ~ 100 Zeichen).

Der Code unten sollte ein Beispiel geben, wo ich gerade blockiert bin.

'data_string_in_orig' zeigt das angegebene Eingabeformat an. Es muss sein Byte wurde für jedes Wort getauscht. Der Wechsel von 'data_string_in_orig' zu 'data_string_in_swapped' wird benötigt. Am Ende brauche ich die Struktur Zugang wie gezeigt. Das erwartete Ergebnis ist innerhalb des Kommentars.

Vielen Dank im Voraus Wolfgang R

%Vor%     
Wolfgang R. 31.10.2012, 10:10
quelle

4 Antworten

13

array.arrays haben eine Methode byteswap :

%Vor%

Die h in array.array('h', x) wurde ausgewählt, weil% ce_de% die Daten in array.array als ein Array von 2-Byte-Kurzschlüssen betrachtet. Wichtig ist, dass jedes Element als 2 Byte lang angesehen wird. x , was vorzeichenlose 2-Byte-Zeichen bedeutet, funktioniert genauso gut.

    
unutbu 31.10.2012, 10:25
quelle
6

Dies sollte genau das tun, was die Version von unutbu tut, aber es könnte etwas einfacher sein, für einige ...

zu folgen %Vor%

Entpacke im Prinzip 6 shorts big-endian, packe als 6 shorts little-endian ein.

Wieder dasselbe, was der Code von unutbu tut, und Sie sollten seinen verwenden.

bearbeiten Habe gerade gemerkt, dass ich mein Lieblings-Python-Idiom dafür verwenden kann ... Tu das auch nicht:

%Vor%     
Triptych 31.10.2012 10:43
quelle
0
%Vor%

Dies ist ein 32 Bit kurzer, unsignierter Short-Swap, den ich mit Code erreicht habe, der sehr ähnlich ist wie der von "Unutbu", nur ein bisschen einfacher zu verstehen. Und technisch binascii wird für den Swap nicht benötigt. Nur array.byteswap wird benötigt.

    
Death_Dealer 04.05.2015 13:38
quelle
0

Der Austausch von 'data_string_in_orig' zu 'data_string_in_swapped' kann auch mit Comprehensions ohne Import durchgeführt werden:

%Vor%

Das Verständnis funktioniert für den Austausch der Byte-Reihenfolge in Hex-Strings, die 16-Bit-Wörter darstellen. Es für eine andere Wortlänge zu ändern ist trivial. Wir können auch eine allgemeine Tauschfunktion für Hex-Ziffern machen:

%Vor%

Die Eingabeparameter sind:

d: die Eingabe-Hex-Zeichenfolge

wsz: die Wortgröße in Nibbles (z.B. für 16-Bit-Wörter wsz = 4, für 32-Bit-Wörter wsz = 8)

gsz: die Anzahl der Nibbles, die zusammenbleiben (z. B. zum Umordnen von Bytes gsz = 2, zum Umordnen von 16-Bit-Wörtern gsz = 4)

    
Ibtsam Haq 20.04.2016 12:55
quelle

Tags und Links