Python struct pack, unpack

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

Il modulo struct di Python

  • può essere utilizzato per gestire dati binari memorizzati in file, database o provenienti da connessioni di rete, ecc.
  • Utilizza stringhe di formato come descrizioni compatte della disposizione delle strutture in C e della conversione intesa da/a valori di Python.

Funzioni del modulo struct di Python

Ci sono cinque funzioni importanti 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:

?: boolean
h: short
l: long
i: int
f: float
q: long long int

Puoi trovare l’elenco completo dei caratteri di formato qui. Iniziamo a esaminare le funzioni del modulo struct uno per uno.

Python struct.pack()

Questa funzione imballa una lista di valori in una rappresentazione Stringa del tipo specificato. Gli argomenti devono corrispondere esattamente ai valori richiesti dal formato. Vediamo rapidamente un esempio di utilizzo di struct pack():

import struct

var = 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: Nota che ‘b’ nell’output sta per binario.

Python struct.unpack()

Questa funzione smonta il valore imballato nella sua rappresentazione originale con il formato specificato. Questa funzione restituisce sempre una tupla, anche se c’è solo un elemento. Vediamo rapidamente un esempio di utilizzo della funzione struct unpack():

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

Quando eseguiamo questo script, otteniamo di nuovo la nostra rappresentazione originale: Chiaramente, dobbiamo dire all’interprete Python il formato in cui vogliamo scomporre i valori.

Python struct calcsize()

Questa funzione calcola e restituisce la dimensione della rappresentazione di stringa di una struct con un formato specifico. La dimensione è calcolata in byte. Diamo un’occhiata veloce a 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 pack_into(), unpack_from()

Queste funzioni ci permettono di imballare i valori in un buffer di stringhe e sballarli da un buffer di stringhe. Queste funzioni sono introdotte nella versione 2.5.

import struct
# ctypes è importato per creare un buffer di stringhe
import ctypes

# Come mostrato nell'esempio precedente
size = struct.calcsize('hhl')
print(size)

# Il buffer 'buff' è creato da ctypes
buff = ctypes.create_string_buffer(siz)

# struct.pack_into() imballa i dati in buff e non restituisce alcun valore
# struct.unpack_from() sballa i dati da buff, restituendo una tupla di valori
print(struct.pack_into('hhl', buff, 0, 5, 10, 15))
print(struct.unpack_from('hhl', buff, 0))

Quando eseguiamo questo script, otteniamo la seguente rappresentazione: Questo è tutto per una breve introduzione al modulo python struct.

Source:
https://www.digitalocean.com/community/tutorials/python-struct-pack-unpack