Stefan B. schrieb:
> // Da durch die Addition ein zweistelliger String herauskommen kann,
Unsinn. Aus der Ziffer an Position 3 im String kann höchstens aus einer
'9' ein ':' werden. Dort ist nur eine Ziffer und es wird immer eine
bleiben, eventuell dann halt eine unleserliche.
> wird so der String wieder einstellig gemacht
1 | if (str_lat[3] > '9') str_lat[3] = str_lat[3] - 10;
|
Und wohin mit dem Übertrag ?
und was, wenn dort wieder ein Übertrag auftritt ?
1 | if (str_lat[2] > '9')
|
2 | {
|
3 | str_lat[2]='0';
|
4 | str_lat[1]+=1;
|
5 | }
|
und wenn dort wieder ein Übertrag auftritt ?
1 | if (str_lat[1] > '9')
|
2 | {
|
3 | str_lat[1]='0';
|
4 | str_lat[0]+=1;
|
5 | }
|
und wenn dort wieder ein Übertrag auftritt ?
Der Strin g kann nicht nach vorne erweiter werden,
er muss nach hinten geschoben werden damit Platz ist für die führende
'1'.
1 | if (str_lat[0] > '9')
|
2 | {
|
3 | str_lat[0]='0';
|
4 | memmove(str_lat+1,str_lat,8);
|
5 | str_lat[0]='1';
|
6 | }
|
und weil man dann gar nicht weiss, ob der NUL-Terminator an Position 8
oder 9 soll, pappt man den besser vorher dran.
1 | char* orig = empfang;
|
2 | char str_lat[9];
|
3 |
|
4 | strncpy(str_lat, orig, 8);
|
5 | str_lat[8] = '\0';
|
6 | ltoa(atol(str_lat)+10000,str_lat,10);
|
mal vorausgesetzt, die long auf deinem Rechner haben 32 bit.