Die Behandlung von Bytes in Python unterscheidet sich erheblich zwischen Python 2.7 und Python 3. Dieser Artikel erläutert, wie man Bytes in beiden Versionen in Integer konvertiert, und hebt die entscheidenden Unterschiede hervor.
Inhaltsverzeichnis
- Python 2.7 und Byte-Strings
- Konvertieren von Bytes in Integer in Python 2.7
- Python 3 und der Typ
bytes
- Konvertieren von Bytes in Integer in Python 3
Python 2.7 und Byte-Strings
In Python 2.7 verarbeitet der Typ str
sowohl Text- als auch Byte-Daten. Ein dedizierter bytes
-Typ, wie er in Python 3 vorhanden ist, fehlt. Byte-Strings sind im Wesentlichen Sequenzen von Zeichen, die Byte-Werte darstellen. Es ist wichtig zu bedenken, dass Python 2.7 offiziell veraltet ist und nicht für neue Projekte verwendet werden sollte.
Konvertieren von Bytes in Integer in Python 2.7
Die Konvertierung einzelner Bytes in Integer erfolgt mit der Funktion ord()
:
byte_string = 'A' # Stellt den Byte-Wert von 'A' dar
integer_value = ord(byte_string)
print(integer_value) # Ausgabe: 65
ord()
liefert den Unicode-Codepunkt, der dem numerischen Wert des Bytes für einzelne Bytes entspricht. Für längere Byte-Strings ist eine Bitmanipulation erforderlich, um sie in größere Integer zu konvertieren. Das folgende Beispiel geht von einer Little-Endian-Byte-Reihenfolge aus:
byte_string = 'x01x02x03' # Beispiel Byte-String (Little-Endian)
integer_value = 0
for byte in byte_string:
integer_value = (integer_value << 8) | ord(byte)
print(integer_value) # Ausgabe: 66051
Dies verschiebt den Integer iterativ um 8 Bits nach links und wendet ein bitweises ODER an, um jedes Byte einzubinden. Für die Big-Endian-Reihenfolge die Iteration umkehren.
Python 3 und der Typ bytes
Python 3 führt explizit den Typ bytes
ein und trennt ihn vom Typ str
(Unicode-Text). bytes
-Objekte sind unveränderliche Sequenzen von Integern im Bereich von 0 bis 255.
Konvertieren von Bytes in Integer in Python 3
Python 3 bietet einen saubereren Ansatz. Für ein einzelnes Byte:
byte_data = b'x41' # Beachten Sie das 'b'-Präfix, das ein Bytes-Literal angibt
integer_value = byte_data[0]
print(integer_value) # Ausgabe: 65
Der direkte Zugriff auf das Byte an Index 0 liefert den Integer-Wert. Für mehrere Bytes wird int.from_bytes()
verwendet, wobei die Byte-Reihenfolge (Endianness) angegeben wird:
byte_data = b'x01x02x03' # Little-Endian Beispiel
integer_value = int.from_bytes(byte_data, byteorder='little')
print(integer_value) # Ausgabe: 66051
byte_data = b'x01x02x03' # Big-Endian Beispiel
integer_value = int.from_bytes(byte_data, byteorder='big')
print(integer_value) # Ausgabe: 16909060
byteorder='little'
bedeutet, dass das niederwertigstes Byte zuerst kommt, während byteorder='big'
bedeutet, dass das höchstwertigstes Byte zuerst kommt. Geben Sie immer byteorder
für die Portabilität an; andernfalls wird der Standard des Systems verwendet.