Konvertierung zu bytes wird als Ascii-Zeichen zurückgegeben

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
AndreNRW
User
Beiträge: 2
Registriert: Samstag 13. August 2022, 10:44

Ich bin neu hier, daher erst einmal ein herzliches Hallo!

Python ist für mich ziemlich neu, daher habe ich eine Frage, wo die meisten von euch bestimmt nur schmunzeln werden aber ich kriege das einfach auch nach vielen Recherchen nicht hin.

Ich will über die serielle Schnittstelle Daten im bytes-Fromat übertragen aber habe ein Problem beim Konvertieren von Zahl oder String zu Bytes.

Ich will z.B. den Wert 100 in Bytes umwandeln. Das mache ich so:

ValueWatt = 100
bytes_ValueWatt = ValueWatt.to_bytes(2, 'big')
print(bytes_ValueWatt)

Als Ausgabe erhalte ich:

b'\x00d'

Ich benötige aber:

b'\x00\x64'

So wie ich das verstehe, wird der zweite Byte-Wert wohl als Ascii-Wert interpretiert und deswegen wird das "d" anstatt "\x64" zurückgegeben.
Aber wie kann ich das unterdrücken? Es soll "\x64" rauskommen und nicht das Ascii-Zeichen!
Benutzeravatar
__blackjack__
User
Beiträge: 13006
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@AndreNRW: Werte im druckbaren ASCII-Bereich werden in der `str()`- bzw. `repr()`-Darstellung von `bytes`-Objekten als ASCII-Zeichen dargestellt. Mit dieser Darstellung macht man ja aber nichts, also ist das auch kein Problem. Warum denkst Du denn da "\x64" zu brauchen? Ob "\x64" oder "d" ist doch völlig egal, das ist der gleiche Bytewert, und um den geht es ja, nicht wie das dargestellt wird, wenn man sich die `repr()`-Darstellung anschaut. Über eine serielle Schnittstelle werden die Bytewerte übertragen, nicht irgendeine Darstellung die nur für Menschen/Programmierer gedacht ist.

Code: Alles auswählen

In [188]: b"d" == b"\x64"                                                       
Out[188]: True

In [189]: b"d"[0], b"\x64"[0]                                                   
Out[189]: (100, 100)
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das ist schon das richtige. Der Buchstabe entspricht dem Wert 0x64. Python stellt bei Bytes alles, was in ascii ist, auch so dar. Das ist aber kein Problem für Deine Anwendung.
AndreNRW
User
Beiträge: 2
Registriert: Samstag 13. August 2022, 10:44

Ah super, ich danke euch vielmals. Muss gestehen, dieses Grundverständnis fehlte mir hier. Aber verstanden, die Daten werden trotz "anderer" Darstellung ja richtig übertragen.
Antworten