Wie man Int in Bytes konvertiert in Python 2 und Python 3

  1. Python 2.7 und 3 Kompatible int zu Bytes Konvertierungsmethode
  2. Python 3 Nur int nach Bytes Konvertierungsmethoden
  3. Performance-Vergleich

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

Wie im letzten Artikel angegeben, ist bytes ein eingebauter Datentyp von Python 3. Sie können bytes einfach benutzen, um den Datentyp Integer 0~255 in Bytes zu konvertieren.

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

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() Methode
  • struct.pack() Methode
  • int.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.

Verwandter Artikel - Python Bytes

  • Wie man Bytes in Ganzzahlen konvertiert in Python
  • comments powered by Disqus