Ich bevorzuge eigentlich das Lesen einzelner Zeichen, die ich dann selbst in Array oder string hinzufüge.
+ Man kann da einen Timeout einbauen
+ Falls die Gegenseite mal das \n vergisst, kann man aufhören wenn es zuviel wird (die Teensy Implementierung von readStringUntil hat im Gegensatz zu Arduino eine einstellbare Maximallänge)
+ Man kann auch Zeilenenden wie \r\n beachten
+ Steuerzeichen kann man ignorieren, z.B. Falls da jemand auf der Gegenseite von Hand tippt
+ Spezialprotokolle wie das obige mit STX kann man gut behandeln, einfach erst mit dem Lesen anfangen, wenn man ein Startzeichen gesehen hat
- - - Aktualisiert - - -
Ok, immerhin einen Timeout haben sie bei Arduino
Code:
String Stream::readStringUntil(char terminator)
{
String ret;
int c = timedRead();
while (c >= 0 && c != terminator)
{
ret += (char)c;
c = timedRead();
}
return ret;
}
beim Teensy sieht die Funktion so aus
Code:
String Stream::readStringUntil(char terminator, size_t max)
{
String str;
size_t length = 0;
while (length < max) {
int c = timedRead();
if (c < 0) {
setReadError();
break; // timeout
}
if (c == 0 || c == terminator) break;
str += (char)c;
length++;
}
return str;
}
Das ist ist ja fast wie bei dem Bug in der Arduino map Funktion ...
Lesezeichen