Comment convertir des Int en octets en Python 2 et Python 3

  1. Méthode de conversion int en bytes compatible avec Python 2.7 et 3
  2. Python 3 Seulement les méthodes de conversion int en bytes
  3. Comparaison des performances

La conversion de int en bytes est l’opération inverse de la conversion de bytes en int] (/fr/howto/python/how-to-convert-bytes-to-integers/) qui est introduite dans le dernier tutoriel HowTo. La plupart des méthodes int-to-bytes introduites dans cet article sont les méthodes inverses des méthodes bytes-to-int.

Méthode de conversion int en bytes compatible avec Python 2.7 et 3

Vous pouvez utiliser la fonction pack dans le Python struct module pour convertir l’entier en octets dans le format spécifique.

>>> import struct
>>> struct.pack("B", 2)
'\x02'
>>> struct.pack(">H", 2)
'\x00\x02'
>>> struct.pack("<H", 2)
'\x02\x00'

Le premier argument de la fonction struct.pack est la chaîne de format qui spécifie le format des octets comme la longueur de l’octet, le signe, l’ordre des octets (petit ou grand endian), etc.

Python 3 Seulement les méthodes de conversion int en bytes

Utilisez bytes pour convertir int en bytes

Comme indiqué dans le dernier article, bytes est un type de données intégré de Python 3. Vous pourriez facilement utiliser bytes pour convertir les entiers 0~255 en octets.

>>> bytes([2])
b'\x02`
avertissement

L’entier doit être entouré par la parenthèse, sinon, vous obtiendrez l’objet octets de taille donnée par le paramètre initialisé avec des octets nuls mais pas les octets correspondants.

>>> bytes(3)
b'\x00\x00\x00'

Utilisez la méthode int.to_bytes() pour convertir int en bytes

Depuis Python3.1, une nouvelle méthode de classe d’entier int.to_bytes() est introduite. C’est la méthode de conversion inverse de int.from_bytes() comme discuté dans le dernier article.

>>> (258).to_bytes(2, byteorder="little")
b'\x02\x01'
>>> (258).to_bytes(2, byteorder="big")
b'\x01\x02'
>>> (258).to_bytes(4, byteorder="little", signed=True)
b'\x02\x01\x00\x00'
>>> (-258).to_bytes(4, byteorder="little", signed=True)
b'\xfe\xfe\xff\xff'

Le premier argument est la longueur des données converties en octets, le second argument byteorder définit l’ordre des octets comme étant petit ou grand, et l’argument optionnel signed détermine si le complément de deux est utilisé pour représenter l’entier.

Comparaison des performances

En Python 3, vous avez 3 façons de convertir des int en bytes,

  • Méthode `bytes()
  • Méthode `struct.pack()
  • int.to_bytes() méthode

Nous vérifierons le temps d’exécution de chaque méthode pour comparer leurs performances, et enfin nous vous donnerons la recommandation si vous voulez augmenter la vitesse d’exécution de votre code.

>>> import timeint
>>> timeit.timeit('bytes([255])', number=1000000)
0.31296982169325455
>>> timeit.timeit('struct.pack("B", 255)', setup='import struct', number=1000000)
0.2640925447800839
>>> timeit.timeit('(255).to_bytes(1, byteorder="little")', number=1000000)
0.5622947660224895
Méthode de conversion -Temps d’exécution (1 million de fois)
bytes() 0.31296982169325455 s
struct.pack() 0.2640925447800839 s
int.to_bytes() 0.5622947660224895 s

Par conséquent, veuillez utiliser la fonction struct.pack() pour effectuer la conversion int-to-bytes afin d’obtenir la meilleure performance d’exécution, bien qu’elle soit déjà introduite dans la branche Python 2.

Article connexe - Python Bytes

  • Comment convertir des octets en entiers en Python 2.7 et 3.x
  • Comment convertir des octets en chaîne de caractères en Python 2 et Python 3
  • Comment convertir une chaîne de caractères en octets en Python
  • comments powered by Disqus