Ich bin nicht fitt im programmieren. Jetzt möchte ich eine Variable in Python anzeigen und habe ein print eingebaut. Leider ist die Ausgabe jetzt b'\x00\x00U\xaa\x00\x00\x00\x00\x00\x00\x00\x13\x00\x00\x00\xac\x00\x00\ x00\x00\xd0\x97fgo3i\xeb\x10\xb5\.... Das passt leider nicht so in meine Welt weil ich lebe in 8bit. Mit Hex könnte ich leben aber was soll \x97fgo3i\ sein. Die Daten sind klassische 8 Bit Bytes die nacheinander seriell im Python ankommen. Kann mir jemand sagen wie man dieses merkwürdige format nennt und wie man daraus 8bit asc bin oder hex machen kann?
Sven schrieb: > Ich bin nicht fitt im programmieren. > Jetzt möchte ich eine Variable in Python anzeigen und habe ein print > eingebaut. Leider ist die Ausgabe jetzt > b'\x00\x00U\xaa\x00\x00\x00\x00\x00\x00\x00\x13\x00\x00\x00\xac\x00\x00\ > x00\x00\xd0\x97fgo3i\xeb\x10\xb5\.... > > Das passt leider nicht so in meine Welt weil ich lebe in 8bit. Mit Hex > könnte ich leben aber was soll \x97fgo3i\ sein. > Die Daten sind klassische 8 Bit Bytes die nacheinander seriell im Python > ankommen. > > Kann mir jemand sagen wie man dieses merkwürdige format nennt und wie > man daraus 8bit asc bin oder hex machen kann? Möglicherweise versuchst du ein bytearray auszugeben. Du solltest dringend ein Python Buch lesen. In diesen Fall würde ein:
1 | #!/usr/bin/python3
|
2 | # -*- coding: UTF-8 -*-
|
3 | |
4 | ba = bytearray((1,2,3,4,5)) |
5 | |
6 | for item in ba: |
7 | print(f'{item:02x} ', end='') |
8 | # 01 02 03 04 05
|
helfen.
>dringend ein Python Buch lesen
das habe ich vor ein paar Jahren genau zu dem Thema getan, hier meine
Aufzeichnung dazu. Leider nur als Bild.
1 | bytes = ( |
2 | b'\x00\x00U\xaa\x00\x00\x00\x00\x00\x00\x00\x13\x00\x00\x00\xac' |
3 | b'\x00\x00\x00\x00\xd0\x97fgo3i\xeb\x10\xb5' |
4 | ) |
5 | print('ugly:') |
6 | print(bytes) |
7 | print('less ugly:') |
8 | print(bytes.hex()) |
führt zu
1 | bytes = ( |
2 | b'\x00\x00U\xaa\x00\x00\x00\x00\x00\x00\x00\x13\x00\x00\x00\xac' |
3 | b'\x00\x00\x00\x00\xd0\x97fgo3i\xeb\x10\xb5' |
4 | ) |
5 | print('ugly:') |
6 | print(bytes) |
7 | print('less ugly:') |
8 | print(bytes.hex()) |
Ist übrigens auch der erste Google-Treffer bei der Suche nach "python print bytes as hex".
vnnn schrieb: > führt zubytes = ( > b'\x00\x00U\xaa\x00\x00\x00\x00\x00\x00\x00\x13\x00\x00\x00\xac' > b'\x00\x00\x00\x00\xd0\x97fgo3i\xeb\x10\xb5' > ) > print('ugly:') > print(bytes) > print('less ugly:') > print(bytes.hex()) Natürlich ist die Ausgabe tatsächlich
1 | ugly: |
2 | b'\x00\x00U\xaa\x00\x00\x00\x00\x00\x00\x00\x13\x00\x00\x00\xac\x00\x00\x00\x00\xd0\x97fgo3i\xeb\x10\xb5' |
3 | prettier: |
4 | 000055aa0000000000000013000000ac00000000d09766676f3369eb10b5 |
Sven schrieb: > Ich bin nicht fitt im programmieren. > Jetzt möchte ich eine Variable in Python anzeigen und habe ein print > eingebaut. Leider ist die Ausgabe jetzt > > was soll \x97fgo3i\ sein. "\x97" "f" "g" "o" "3" "i" > Die Daten sind klassische 8 Bit Bytes die nacheinander seriell im Python > ankommen. > > wie man daraus 8bit asc [...] machen kann? Falls die Bytes in UTF-8 codiert sind: b'\x00...'.decode("utf-8") was aber zu einem Fehler führt, d.h. die Daten sind nicht in UTF-8. Wenn du es als List haben willst:
1 | print (list(l for l in b'\x00\x00U\xaa\x00\x00...')) |
2 | [0, 0, 85, 170, 0, 0, ...] |
d.h. man kann auf die Bytes zugreifen wie auf ein Array / Liste, aber dann werden natürlich keine multi-Byte Zeichen erkannt.
Mein Text war Teil eines Wikiartikels, als PDF gedruckt. Ich habe ihn hier in der Sandbox nochmal so ähnlich eingegeben: https://www.mikrocontroller.net/articles/Testseite#Python-Bytearray_umwandeln
Sven schrieb: > b'\x00\x00U\xaa\x00\x00\x00\x00\x00\x00\x00\x13\x00\x00\x00\xac\x00\x00\ > x00\x00\xd0\x97fgo3i\xeb\x10\xb5\.... Das IST bereits ein bytearray, da muss man nicht extra eine Liste daraus bauen. Man kann die Variable in der das Zeug steht entweder wie ein C-Programmierer byte für byte über var[index] ansprechen,
1 | #!python
|
2 | for index in range(len(var)): |
3 | # var[index] Werte von 0x00…0xff
|
oder über:
1 | #!python
|
2 | for byte_item in var: |
3 | # byte_item Werte von 0x00…0xff
|
Ich hatte damals einen DDS am Raspi angesteuert , die gewünschte Frequenz berechnet, und musste es nur noch über den SPI-Bus ausgeben. ich zitiere mich mal: Allen ist gemeinsam, dass die Ausgabe des Byte-Arrays auf dem Bildschirm Buchstabensuppe ergibt. Python gibt alle Bytes, die einem druckbaren Ascii-Zeichen entsprechen als dieses Zeichen aus, nicht druckbare werden dagegen als zweistellige Hexadezimalzahl mit vorgestelltem \x gezeigt. ...\x97fgo3i... ist genau diese Buchstabensuppe.
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.