Python Anfängerin

ComFreek

Mod | @comfreek
Moderator
Mit Python 3.7 bekomme ich:
Code:
>>> (39).to_bytes(2, "big")
b"\x00'"

>>> (39).to_bytes(1, "big")
b"'"
Die Ausgaben passen doch, oder? Die byte-Objekte werden halt geprettyprinted von der byte-Klasse. Bis 31 gibt sie Hexadezimalziffern aus, danach das ASCII-Zeichen:
Code:
>>> (31).to_bytes(1, "big")
b'\x1f'

>>> (32).to_bytes(1, "big")
b' '
Es scheint, als ob bei 128 und danach wieder Hexadezimalziffern ausgegeben werden:
Code:
>>> (127).to_bytes(1, "big")
b'~'

>>> (128).to_bytes(1, "big")
b'\x80'

Ich wäre sehr erstaunt, wenn ein Bug in einer solch grundlegenden Funktion vorherrschen würde. Dann wären ja alle Codec-Libraries betroffen, d.h. jede Lib, die irgendwie binäre Daten liest oder schreibt.

Übrigens mit der hex-Methode auf der bytes-Klasse kannst du dir immer Hexadezimalziffern anzeigen lassen: (39).to_bytes(1, "big").hex()
Die habe ich in der Python API Doku gefunden: Built-in Types — Python 3.8.5 documentation.
 

melmager

Erfahrenes Mitglied
Mit Python 3.7 bekomme ich:
Code:
>>> (39).to_bytes(2, "big")
b"\x00'"
genau die ausgabe hatte mich verwirrt - mittlerweile habe ich auch mitbekommen das die ausgabe das byte in zeichen umwandelt

Info:
mittlerweile bin ich bei eric als IDE gelandet ... der hilft wenigstens bei den in python lebensnotwendigen einrückungen
 

ComFreek

Mod | @comfreek
Moderator
genau die ausgabe hatte mich verwirrt - mittlerweile habe ich auch mitbekommen das die ausgabe das byte in zeichen umwandelt
Sehr gut!

Möglicherweise habe ich in meiner Antwort auch übertrieben mit "die Ausgaben passen doch, oder?" :) Ich habe da auch erstmal gestutzt und erst nach Probieren weiterer Werte war mir klar, was passiert.