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% array.arrays
haben eine Methode byteswap :
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.
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%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.
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)
Tags und Links python string swap python-2.x hex