Python Programming

Bytes in Integer umwandeln in Python 2.7 und 3

Spread the love

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

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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert