Jul 03, 2024

Wiki

Python

Aide

edit SideBar

Search

Struct


Le module struct permet la conversion entre valeurs typées de python, et données binaires du C.

Conversion Python -> 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

Attributs

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.

Conversion C -> Python

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)

Quelle convention

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.

Quelle utilisation

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().

Page Actions

Recent Changes

Group & Page

Back Links