Articles

Python struct pack, unpack

Posted on

Il modulo Python struct è in grado di eseguire le conversioni tra i valori Python e le struct C, che sono rappresentate come Python Strings.

Python Struct

  • Il modulo Python struct può essere usato nella gestione dei dati binari memorizzati in file, database o da connessioni di rete ecc.
  • Utilizza stringhe di formato come descrizioni compatte del layout delle strutture C e la conversione prevista da/verso valori Python.

Funzioni di strutture Python

Ci sono cinque importanti funzioni nel modulo struct – pack()unpack()calcsize()pack_into() e unpack_from(). In tutte queste funzioni, dobbiamo fornire il formato dei dati da convertire in binario.

Alcuni dei caratteri di formato popolari sono:

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

Si può ottenere la lista completa dei caratteri di formato qui. Cominciamo ad esaminare le funzioni del modulo struct una per una.

Python struct.pack()

Questa funzione impacchetta una lista di valori in una rappresentazione Stringa del tipo specificato. Gli argomenti devono corrispondere esattamente ai valori richiesti dal formato. Guardiamo velocemente l’esempio di struct pack():

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

Quando eseguiamo questo script, otteniamo la seguente rappresentazione:
python struct pack

Nota che ‘b’ nell’output sta per binario.

Python struct.unpack()

Questa funzione scompatta il valore impacchettato nella sua rappresentazione originale con il formato specificato. Questa funzione restituisce sempre una tupla, anche se c’è un solo elemento. Diamo rapidamente un’occhiata alla funzione struct unpack() di esempio:

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

Quando eseguiamo questo script, otteniamo indietro la nostra rappresentazione originale:
python struct unpack
Chiaramente, dobbiamo dire all’interprete Python il formato in cui dobbiamo scompattare i valori.

Python struct calcsize()

Questa funzione calcola e restituisce la dimensione della rappresentazione stringa della struct con un dato formato.

La dimensione è calcolata in termini di byte. Guardiamo velocemente un esempio di codice:

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

Quando eseguiamo questo script, otteniamo la seguente rappresentazione:
python struct calcsize

Python struct pack_into(), unpack_from()

Queste funzioni ci permettono di impacchettare i valori in un buffer di stringhe e di scompattarli da un buffer di stringhe. Queste funzioni sono state introdotte nella versione 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))

Quando eseguiamo questo script, otteniamo la seguente rappresentazione:
Python Struct pack_into e unpack_from string buffer

Questo è tutto per una breve introduzione del modulo python struct.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *