Le module struct permet la conversion entre valeurs typées de python, et données binaires du C.
Illustrons cela par quelques imports :
>>> import struct >>> import binascii
Puis saisissons des valeurs dans un tuple :
>>> valeurs = (1, 'ab', 2.7)
On doit alors spécifier le format de ces valeurs, avant d'en demander la conversion :
>>> s = struct.Struct('I2sf')
ce qui signifie que, dans valeurs se trouve un int, deux string et un float. On peut dorénavant réaliser la traduction :
>>> conversion = s.pack(*valeurs) >>> print binascii.hexlify(conversion) 0100000061620000cdcc2c40
On peut obtenir le nombre de bytes nécessaires pour stoquer ces données, ainsi :
>>> s.size 12
ainsi que le format qui a été fournis, avec l'attribut s.format.
L'opération inverse s'effectue ainsi :
On peut obtenir le nombre de bytes nécessaires pour stoquer ces données, ainsi :
>>> reconversion = binascii.unhexlify('0100000061620000cdcc2c40') >>> s = struct.Struct('I2sf') >>> print s.unpack(reconversion) (1, 'ab', 2.7000000476837158)
On peut changer la manière dont les valeurs sont encodées (endianness, little-endian, high-endian, etc.), en ajoutant un caractère spécifique prédéfini à struct.Struct.
Par exemple,
>>> s = struct.Struct('<I2sf')
signifie que l'encodage doit être en convention little-endian.
Traditionnellement, on utilise de telles données binaires pour améliorer les performances d'un programme donné.
On peut encore faire mieux, en évitant qu'un nouveau buffer soit systématiquement alloué à chaque nouvelle valeur convertie. Pour se faire, on pourra utiliser les méthodes pack_into() et unpack_from().