Articles

Python struct pakuj, rozpakowuj

Posted on

Moduł Python struct jest zdolny do wykonywania konwersji pomiędzy wartościami Pythona a strukturami C, które są reprezentowane jako Python Strings.

Python Struct

  • Moduł Python struct może być używany w obsłudze danych binarnych przechowywanych w plikach, bazie danych lub pochodzących z połączeń sieciowych itp.
  • Używa on format Strings jako zwięzłych opisów układu struktur C i zamierzonej konwersji na/z wartości Pythona.

Funkcje struktur Pythona

W module struct znajduje się pięć ważnych funkcji – pack()unpack()calcsize()pack_into() i unpack_from(). We wszystkich tych funkcjach musimy podać format danych, które mają zostać przekonwertowane na binarne.

Kilka popularnych znaków formatu to:

?: booleanh: shortl: longi: intf: floatq: long long int

Możesz uzyskać pełną listę znaków formatu tutaj. Zacznijmy po kolei przyglądać się funkcjom modułu struct.

Python struct.pack()

Ta funkcja pakuje listę wartości do reprezentacji String określonego typu. Argumenty muszą dokładnie odpowiadać wartościom wymaganym przez format. Przyjrzyjmy się szybko przykładowi struct pack():

import structvar = struct.pack('hhl', 5, 10, 15)print(var) var = struct.pack('iii', 10, 20, 30)print(var)

Gdy uruchomimy ten skrypt, otrzymamy następującą reprezentację:
python struct pack

Zauważ, że 'b' w Wyjściu oznacza binarny.

Python struct.unpack()

Ta funkcja rozpakowuje spakowaną wartość do jej oryginalnej reprezentacji w określonym formacie. Funkcja ta zawsze zwraca tuple, nawet jeśli jest tylko jeden element. Przyjrzyjmy się szybko przykładowi funkcji struct unpack():

import structvar = struct.pack('hhl', 5, 10, 15)print(var)print(struct.unpack('hhl', var))

Gdy uruchomimy ten skrypt, otrzymamy z powrotem naszą oryginalną reprezentację:
python struct unpack
Wyraźnie musimy powiedzieć interpreterowi Pythona, do jakiego formatu musimy rozpakować wartości.

Python struct calcsize()

Funkcja ta oblicza i zwraca rozmiar Stringowej reprezentacji struct o podanym formacie.

Rozmiar obliczany jest w bajtach. Przyjrzyjmy się szybko przykładowemu snippetowi kodu:

import struct var = struct.pack('hhl', 5, 10, 15)print(var)print("Size of String representation is {}.".format(struct.calcsize('hhl')))

Po uruchomieniu tego skryptu otrzymamy następującą reprezentację:
python struct calcsize

Python struct pack_into(), unpack_from()

Funkcje te pozwalają nam na pakowanie wartości do bufora string i rozpakowywanie z bufora string. Funkcje te zostały wprowadzone w wersji 2.5.

import struct# ctypes is imported to create a string bufferimport ctypes# As shown in previous examplesize = struct.calcsize('hhl')print(size)# Buffer 'buff' is created from ctypesbuff = ctypes.create_string_buffer(siz)# struct.pack_into() packs data into buff and it doesn't return any value# struct.unpack_from() unpacks data from buff, returns a tuple of valuesprint(struct.pack_into('hhl', buff, 0, 5, 10, 15))print(struct.unpack_from('hhl', buff, 0))

Gdy uruchomimy ten skrypt, otrzymamy następującą reprezentację:
Python Struct pack_into and unpack_from string buffer

To wszystko, jeśli chodzi o krótkie wprowadzenie modułu python struct.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *