Inkonsistentes Verhalten von int.to_bytes ()
Wenn ich schreibe:
expint = 34614
expint = expint.to_bytes(2,'big')
Ich erhalte den Wert expint = b '\ x876' anstelle von b '\ x87 \ x36' (die 3 fehlt und das Format scheint falsch zu sein). Als ich jedoch dasselbe mit expint = 65418 versuchte, erhielt ich das richtige Ergebnis, b '\ xff \ x8a'. Könnte dies ein Fehler im Interpreter oder in anderen Tools sein, die ich verwende? Ich verwende Python 3.7 in Visual Studio 2017.
Antworten
Dies hat nichts int.to_bytes()
mit dem bytes
Typ selbst zu tun .
Ich erhalte den Wert expint = b '\ x876' anstelle von b '\ x87 \ x36'
Diese Beschwerde macht keinen Sinn, weil b'\x876'
und b'\x87\x36'
ist das gleiche :
>>> b'\x87\x36'
b'\x876'
>>> b'\x87\x36' == b'\x876'
True
Ein bytes
Objekt der Darstellung ist nicht einfach ein Hex - Dump. Die Grammatik von Byte-Strings erlaubt aus historischen Gründen viele andere Optionen (dh: weil wir in 2.x so getan haben, als könnten sie Text darstellen). Die kanonische Darstellung (dh die von Python als print
Instanz erzeugte ) verwendet nur \x
Stil-Escape-Zeichen als letzten Ausweg.
In ASCII wird das Byte mit dem Wert 0x36
dem Symbol zugeordnet 6
. (Nochmals: Früher haben wir so getan, als könnten wir Text auf diese Weise darstellen. Und wenn wir uns nur mit Englisch und einer kleinen Auswahl europäischer Sprachen befassen müssen und auswählen können, mit welcher europäischen Sprache wir uns zu einem bestimmten Zeitpunkt befassen, können wir sortieren -von auch damit durchkommen.)