UART String hat mehrere Endzeichen ('\0')

OP #5224306
Lesenswert?
• ▲
▼
Ich verwende den Feinstaubsensor SDS011 und dieser sendent sekündlich 
einen Datenstring aus 10 Byte per UART. Dieser enthält ein Startbyte 
0xAA und ein Endbyte 0xAB. Der Inhalt ist pro Byte kodiert und kann 
mehrmals 0x00 also '\0' (String Ende) sein. Verarbeitet man den 
angnommenen String dann per Stringfunktion funktioniert das ganze 
natürlich nicht mehr und man muss diesen einzeln durchgehen. Gäbe es 
dafür einen Trick?
#5224387
Lesenswert?
• ▲
▼
Tino K. schrieb:
> Datenstring aus 10 Byte per UART. Dieser enthält ein Startbyte
> 0xAA und ein Endbyte 0xAB. Der Inhalt ist pro Byte kodiert und kann
> mehrmals 0x00 also '\0' (String Ende) sein. Verarbeitet man den
> angnommenen String dann per Stringfunktion funktioniert das ganze
> natürlich nicht

Natürlich nicht. Ein String ist (in C) zwar ein Array von Bytes, aber 
nicht jedes Array von Bytes ist deswegen ein String. Wie kommt man 
überhaupt auf die Idee, in dieser Situation Stringfunktionen verwenden 
zu wollen?

> Gäbe es dafür einen Trick?

Was für einen "Trick" brauchst du denn, um auf einzelne Bytes aus einem 
Array zuzugreifen?
Gast #5224394
Lesenswert?
• ▲
▼
Ich kenne einen Trick!

Baue dir einen Parser.

Sind die Datenblöcke erstmal identifiziert, kannst du eine, dir genehme, 
Struktur draus bauen.
Meinetwegen auch Zeichenketten.

Tipp:
Wende die c Zeichenketten Funktionen nur auf C Zeichenketten an.
Sonst drohen Sorgen und Nöte.
(aber das weißt du ja schon, selber bemerkt)
OP #5224792
Lesenswert?
• ▲
▼
Meine Frage richtete sich nicht mit dem Ansinnen Lösungen zu bekommen, 
weil ich nicht mehr weiter weiß. Eher Denkanstöße für später zu 
bekommen...
Werte die entsprechenden Bytes einzeln aus und behandele es nicht weiter 
als String. Aber bis ich drauf gekommen bin, hat es echt eine ganze 
Weile gedauert.

Danke für alle Antworten!

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 8 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.