mikrocontroller.net

Forum: PC-Programmierung Python Ausgabe von Werten - blockweise


Autor: sim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen.

Ich muss gleich vorne weg nehmen, dass ich ein absoluter Neuling in 
Python bin. Ich habe auch schon gegooglet, aber keine Lösung für mein 
Problem gefunden.

Also, ich empfange mit einem kleinen Python Skript Werte von der 
Seriellen Schnittstelle und speichere diese in "a" ab. Nun will ich 
diese Werte in der Konsole in hex ausgeben. Dies funktioniert auch 
soweit mit folgendem Befehl.
print binascii.hexlify(a)

Die Ausgabe sieht dann allerdings so aus:

7410001420ef20ef20ef20ef20ef20ef20efbb64

Ich hätte es aber gerne ein wenig übersichtlicher formatiert, also 
Blockweise. Es sollte dann so aussehen:

74 10 00 14 20 ef 20 ef 20 ef 20 ef 20 ef 20 ef 20 ef bb 64


Also wie kann ich nach jedem Byte ein Leerzeichen einfügen?

Gruß Sim

Autor: Python (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn x deine Liste ist:
" ".join(map(hex,x))

Autor: sim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vor der Ausgabe?

Autor: Python (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
print " ".join(map(hex,x))

Autor: sim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Leider bekomme ich dabei folgende Fehlermeldug:

hex() argument can't be converted to hex

Autor: Python (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was hat a für einen Typ?

Autor: sim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Python schrieb:
> Was hat a für einen Typ?

Keine Ahnung. Ich dachte man muss in Python keine Variablen deklarieren, 
dass hat mich sowieso schon gewundert. Ich habe eingfach geschrieben:
a = (self._ser.read(PACKET_SIZE+1))

Autor: Python (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist self._ser eine Instanz von PySerial?

Autor: sim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Python schrieb:
> Ist self._ser eine Instanz von PySerial?

Ja ich glaube. Ich habe das nach einem Beispiel gemacht. self._ser wird 
wie folgt angelegt:

 def __init__(self):
        self._ser = serial.Serial(0, 115200, timeout=0.1, stopbits=2, 
parity=serial.PARITY_NONE)

Autor: Python (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du eine Pythen Version > 2.6 hast (nehme ich mal an), dann liefert 
read einen String zurück. Auch wenn du keinen Typen deklarierst so hat 
doch jede Variable einen Typen, nur musst du ihn nicht explizit 
hinschreiben.

Du kannst das probieren:
print " ".join(map(hex,map(ord,a)))

Autor: Yalu X. (yalu) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fall dich die "0x"-Präfixe in der Ausgabe stören:
print " ".join(map(lambda c: "%02x" % ord(c), x))
oder auch
print " ".join(["%02x" % ord(c) for c in x])

Autor: Python (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oder
print reduce(lambda a,b: a+"%02x "%ord(b),x,"")

Autor: sim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Yalu X. schrieb:
> print " ".join(map(lambda c: "%02x" % ord(c), x))

Das hat es gebracht! Danke

Gruß sim

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.