Empfangenen String auswerten

Moin,

ich habe ein kleines Problem und weiß nicht weiter.....

Ich sende dem Arduino einen String per Telnet.

Diese will ich zerlegen::

    byte Sp =(byte) InStr.substring(2,4).toInt();
    byte Zu =(byte) InStr.substring(4,6).toInt();
    byte Be =(byte) InStr.substring(6,8).toInt();
    unsigned long ID = atol(InStr.substring(8));

Leider funktioniert das mit dem unsigned long nicht.....Hat jemand einen Tip wie man das macht?

Dafür gibt es strtoul():
http://www.cplusplus.com/reference/cstdlib/strtoul/
atol() liefert einen long. Kein unsigned long!

Das ist aber für C Strings gedacht (also Null-terminierte char Arrays)! Nicht für die schrottige Arduino String Klasse. Das sind zwei verschiedene Dinge. Du kannst kein String Objekt an strtoul() oder atol() übergeben. Also am besten gleich C Strings verwenden. Oder c_str() wenn es unbedingt die String Klasse sein muss:

C Strings kann man schön und sehr speichersparend mit strtok() entlang eines Delimiters splitten. Oder du da anscheinend die Länge genau kennst, einfach etwas Zeiger-Arithmetik verwenden.
z.B.:

char str[] = "012,123,234";
byte b1 = atoi(str);
byte b2 = atoi(str + 4);
byte b3 = atoi(str + 8);

Oder wenn die Teil-Strings nicht immer konstant breit sind:

char str[] = "2,12,234";
byte b1 = atoi(strtok(str, ","));
byte b2 = atoi(strtok(NULL, ","));
byte b3 = atoi(strtok(NULL, ","));

Aber wie gesagt geht das nicht direkt mit String Objekten.