Comment convertir des Int en octets en Python 2 et Python 3
-
Méthode de conversion
int
enbytes
compatible avec Python 2.7 et 3 -
Python 3 Seulement les méthodes de conversion
int
enbytes
- Comparaison des performances
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'
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.
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