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?
man kann beides machen, die Länge als Text (also Menschenlesbar) oder als zahl (binär) übertragen.
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.
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
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.
Bei Strinlaengen sicher unterhalb 255 Byte wuerde man dann ein Laengenbyte verwenden, sonst eben Word, oder DWord.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.