HOWTO · Python
Wie man Int in Bytes konvertiert in Python 2 und Python 3
Wie man int in Bytes konvertiert in Python 2.7 und Python 3.
Auf dieser Seite
Die Konvertierung von int nach bytes ist die umgekehrte Operation der Konvertierung von bytes nach int, die im letzten HowTo-Tutorial vorgestellt wurde. Die meisten der in diesem Artikel vorgestellten int-zu-Byte-Methoden sind die umgekehrten Methoden der Bytes-zu-Int-Methoden.
Python 2.7 und 3 Kompatible int zu bytes Konvertierungsmethode
Sie könnten die pack Funktion im Python struct Modul benutzen, um die Integerzahl in Bytes im spezifischen Format zu konvertieren.
>>> import struct
>>> struct.pack("B", 2)
'\x02'
>>> struct.pack(">H", 2)
'\x00\x02'
>>> struct.pack("<H", 2)
'\x02\x00'
Das erste Argument in der struct.pack Funktion ist der Formatstring, der das Format der Bytes angibt, wie z. B. Byte-Länge, Vorzeichen, Byte-Ordnung (Little oder Big Endian), etc.
Python 3 Nur int nach bytes Konvertierungsmethoden
Benutze bytes, um int in bytes umzuwandeln
>>> bytes([2])
b'\x02'
Der Integer muss von der Klammer umgeben sein, sonst erhalten Sie das Bytes-Objekt der Größe, die durch den mit Null-Bytes initialisierten Parameter gegeben ist, aber nicht die entsprechenden Bytes.
>>> bytes(3)
b'\x00\x00\x00\x00'
Benutzen Sie die Methode int.to_bytes(), um int in bytes zu konvertieren
Ab Python3.1 wird eine neue Integer-Klassenmethode int.to_bytes() eingeführt. Es ist die umgekehrte Konvertierungsmethode von int.from_bytes(), wie im letzten Artikel besprochen.
>>> (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'
Das erste Argument ist die gewandelte Datenlaenge der Bytes, das zweite Argument byteorder definiert die Byte-Reihenfolge als Little oder Big-Endian, und das optionale Argument signed bestimmt, ob das Zweierkomplement verwendet wird, um die Ganzzahl darzustellen.
Performance-Vergleich
In Python 3 haben Sie 3 Möglichkeiten, int in bytes zu konvertieren,
bytes()Methodestruct.pack()Methodeint.to_bytes()Methode
Wir überprüfen die Ausführungszeit jeder Methode, um ihre Leistung zu vergleichen und geben Ihnen schließlich die Empfehlung, wenn Sie Ihre Code-Ausführungsgeschwindigkeit erhöhen wollen.
>>> 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
| Umrechnungsmethode | Ausführungszeit (1 Million mal) |
|---|---|
bytes() |
0.3129698982169325455 s |
struct.pack() |
0.2640925447800839 s |
int.to_bytes() |
0.5622947660224895 s |
Daher verwenden Sie bitte die struct.pack() Funktion, um die Int-zu-Byte-Konvertierung durchzuführen, um die beste Ausführungsleistung zu erhalten, obwohl sie bereits im Python 2-Zweig eingeführt wurde.