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

Jinku Hu 30 Januar 2023
  1. Python 2.7 und 3 Kompatible int zu bytes Konvertierungsmethode
  2. Python 3 Nur int nach bytes Konvertierungsmethoden
  3. Performance-Vergleich
Wie man Int in Bytes konvertiert in Python 2 und Python 3

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'
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.

Autor: 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

Verwandter Artikel - Python Bytes