Forum: Mikrocontroller und Digitale Elektronik Stringlänge übertragen


von Jens K. (mister232)


Lesenswert?

Hallo Leute,

ich hab da mal eine Frage. Ich denke die Lösung ist sehr einfach, aber 
ich stehe gerade irgendwie auf dem Schlauch :-(

Ich übertrage vom Computer über eine serielle Schnittstelle einen String 
an einen Mikrocontroller. Dabei sende ich zunächst die Länge des Strings 
und dann den String. Die Übertragung funktioniert soweit auch, nur 
empfange ich als Länge leider immer den Dezimalwert.

Sende ich also ein Zeichen, so wartet die Funtkion auf 49. Wie wandle 
ich das wieder um in den entsprechenden ASCII-Wert, sodass meine 
Funktion das richtig verarbeiten kann?

von Peter II (Gast)


Lesenswert?

man kann beides machen, die Länge als Text (also Menschenlesbar) oder 
als zahl (binär) übertragen.

von kif (Gast)


Lesenswert?

Wenn du in dein Terminalprogramm z.B. eine "1" eingibst und diese 
abschickst, dann wird nicht etwa "1" geschickt, sondern 49, denn die "1" 
ist ebenfalls ein Zeichen.

http://www.asciitable.com/index/asciifull.gif

Um mit dem Wert rechnen zu können, musst du in deinem 
Mikrocontroller-Programm also vom empfangenen Zeichen einfach 48 
abziehen. So wird aus 49 eine 1, aus 50 eine 2 usw.

von oldmax (Gast)


Lesenswert?

Hi
So ganz schlau bin ich aus deiner Frage nicht geworden. Du empfängst 
das, was du sendest. Wenn du die Länge dezimal abschickst, kommt sie 
auch so an. Der Übertragung ist das völlig Banane, ob du Strings oder 
Werte verschickst. Du solltest dir ein Protokoll schreiben. 1. Zeichen: 
Länge Dezimal, dann entsprechend viele ASCII, danach vielleicht noch ein 
Prüfbyte. Damit bist du in der Lage, Strings mit variabler Länge zu 
versenden. Die Länge in ASCII zu wandeln,macht nicht viel Sinn, wenn du 
mit variablen Längen arbeitest und bei festen Längen brauchst du keine 
Angabe über Länge des String. Deine Empfangsroutine muss also das erste 
Byte entsprechend als Längenwert deuten und dann die empfangenen Daten 
in den Empfangspuffer schreiben.
Gruß oldmax

von Troll Alarm (Gast)


Lesenswert?

Es gibt auch Ansaetze, Zahlen nach ASCII Hex zu wandeln, dann wird jedes 
Datenbyte als zwei ASCII character uebertragen. Wenn man nicht mit einem 
Terminal zuschauen will und fliessend Hex umwandeln kann, wuerd ich 
Binaer empfehlen.

von Troll Alarm (Gast)


Lesenswert?

Bei Strinlaengen sicher unterhalb 255 Byte wuerde man dann ein 
Laengenbyte verwenden, sonst eben Word, oder DWord.

von Peter D. (peda)


Lesenswert?

Wozu überhaupt die Länge übertragen?
Ein String endet doch mit "\n" (Tastatur) oder "\0" (C-Style).

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
Noch kein Account? Hier anmelden.