Heim > Backend-Entwicklung > Python-Tutorial > Warum stellt „bytes(n)' nicht die binäre Form von „n' dar?

Warum stellt „bytes(n)' nicht die binäre Form von „n' dar?

Linda Hamilton
Freigeben: 2024-10-20 14:54:02
Original
714 Leute haben es durchsucht

Why Doesn't

Warum stellt „bytes(n)“ nicht binär dar?

Die Funktion „bytes(n)“ in Python 3 generiert eine Bytefolge der Länge 'n ' mit Nullbytes gefüllt, anstatt die ganze Zahl 'n' in ihre binäre Darstellung umzuwandeln. Dieses unerwartete Verhalten hat seine Wurzeln in den in Python 3.2 eingeführten Änderungen.

Die „to_bytes“-Methode

Um eine Ganzzahl in ihre binäre Darstellung umzuwandeln, können Sie die in eingeführte „to_bytes“-Methode verwenden Python 3.2. Das folgende Beispiel demonstriert die Verwendung:

<code class="python">>>> (1024).to_bytes(2, byteorder='big')
b'\x04\x00'</code>
Nach dem Login kopieren

Alternativ können Sie Ihre eigenen Funktionen implementieren, um die Ganzzahl-zu-Byte-Konvertierung durchzuführen:

<code class="python">def int_to_bytes(x: int) -> bytes:
    return x.to_bytes((x.bit_length() + 7) // 8, 'big')

def int_from_bytes(xbytes: bytes) -> int:
    return int.from_bytes(xbytes, 'big')</code>
Nach dem Login kopieren

Vorzeichenbehaftete Ganzzahlen

Die Methode „to_bytes“ unterstützt nur die Konvertierung vorzeichenloser Ganzzahlen. Bei vorzeichenbehafteten Ganzzahlen ist die Berechnung der Bitlänge komplexer:

<code class="python">def int_to_bytes(number: int) -> bytes:
    return number.to_bytes(length=(8 + (number + (number < 0)).bit_length()) // 8, byteorder='big', signed=True)

def int_from_bytes(binary_data: bytes) -> Optional[int]:
    return int.from_bytes(binary_data, byteorder='big', signed=True)</code>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWarum stellt „bytes(n)' nicht die binäre Form von „n' dar?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage