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

Jinku Hu 30 janvier 2023
  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
Comment convertir des Int en octets en Python 2 et Python 3

La conversion de int en bytes est l’opération inverse de la conversion de bytes en int 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.

Auteur: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Article connexe - Python Bytes