Apr 03, 2026

Wiki

Python

Aide

edit SideBar

Search

Une Page Au Hasard


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


This page may have a more recent version on pmwiki.org: PmWiki:UnePageAuHasard, and a talk page: PmWiki:UnePageAuHasard-Talk.

Page Actions

Recent Changes

Group & Page

Back Links