Zwei ASCII Zeichen aus einem String in ein Byte umwandeln.

Hallo,
ich habe ein Problem bei dem ich nicht weiterkomme. Ich erhalte einen String der ungefähr so aussieht. "startwerte=12:45:14:88"

Ich möchte jetzt die jeweils zwei ASCII Zeichen 12, 45,14,88 in jeweils ein Byte umwandeln. Kann mir jemand sagen wie ich das machen kann. Ich müsste doch irgendwie die jeweiligen zwei Stellen kopieren und dann in ein Byte umwandeln, oder? Ich komme einfach nicht weiter. Wäre schön wenn mir jemand helfen könnte.

Liebe Grüße LS

Da gibt es mehrere Möglichkeiten.

Nur wenn die Werte immer zwei-stellig sind(!!):

char str[] = "startwerte=12:45:14:88";
int b1 = atoi(str + 11);
int b2 = atoi(str + 14);
int b3 = atoi(str + 17);
int b4 = atoi(str + 20);

Da man hier mit festen Indizes arbeitet müssen die Zahlen immer an der gleichen Stelle stehen

Die nächsten drei gehen auch mit Variabler Länge:

char str[] = "startwerte=12:45:14:88";
int b1, b2, b3, b4;
sscanf_P(str + 11, PSTR("%d:%d:%d:%d"), &b1, &b2, &b3, &b4);

Oder:

char str[] = "startwerte=12:45:14:88";
int b1 = atoi(strtok(str + 11, ":"));
int b2 = atoi(strtok(NULL, ":"));
int b3 = atoi(strtok(NULL, ":"));
int b4 = atoi(strtok(NULL, ":"));

Oder:

char str[] = "startwerte=12:45:14:88";
char* endPtr;

int b1 = strtol(str + 11, &endPtr, 10);
int b2 = strtol(endPtr + 1, &endPtr, 10);
int b3 = strtol(endPtr + 1, &endPtr, 10);
int b4 = strtol(endPtr + 1, &endPtr, 10);

sscanf() oder strtol() brauchen wahrscheinlich weniger Flash, da es nur eine Funktion ist. Im Gegensatz zu strtok() + atoi(). strtol() ist dabei im Prinzip strtok_r() (die reentrant Version von strtok()) und atoi() in einer Funktion.

Wow... :slight_smile: Danke, dass war schnell. Das hilft mir weiter.

Viele Grüße und schönes Wochenende LS

Das mit dem Flash Verbrauch stimmt doch nicht. strtol() braucht mehr als doppelt so viel Speicher wie atoi() + strtok() :o :o

Das hängt wahrscheinlich damit zusammen, dass man damit auch Zahlen mit anderen Basen (z.B. auch Binär und Hex, aber auch beliebige andere) umwandeln kann. Dieser Code wird mit compiliert, auch wenn man ihn gar nicht braucht.

sscanf() ist natürlich noch umfangreicher und braucht noch mal 1kB mehr. Da hatte ich nicht richtig nachgedacht. Das war eigentlich klar ohne es zu überprüfen.

atoi() + strtok() ist demnach die beste Option für Zahlen mit variabler Stellenanzahl. Und braucht nicht viel mehr Speicher als atoi() alleine.