Hallo!
Ich bekomme über eine User-schnittstelle einen String. In erster Instanz 
verifiziere ich die Zeichen, sodass nur noch max. 5 Zahlen und evtl. ein 
Minuszeichen am Anfang enthalten sind.
z.B. "-12345" oder "12345"
Der Wertebereich soll den int-Datentyp entsprechen. D.h. Zahlen zw. 
-32768 und 32767 sollen gültig sein.
D.h. die Zahlen "-55555" oder "66666" sollen einen Fehler zurückgeben. 
(=Funktions-Return -1)
Die Funktion lautet folgendermassen:
1  | char dezstr_2_int( unsigned char *string, int *value )
  | 
2  | {
 | 
3  |   unsigned char is_neg = 0, i;
  | 
4  |   long int ret_value = 0;
  | 
5  | 
  | 
6  |   for( i = 0; i < 7; i++)
  | 
7  |   {
 | 
8  |     if(*(string + i) == 0x00) { break; }
 | 
9  |   }
  | 
10  | 
  | 
11  |   for(; *string; string++ ) // string-to-integer - Umwandlung
  | 
12  |   {
 | 
13  |     if (*string == '-') { i--; is_neg = 1; continue; } // Vorzeichen auf negativ
 | 
14  |     
  | 
15  |     //Dezimalzahl umwandeln
  | 
16  |     switch (i)
  | 
17  |     {
 | 
18  |       case 1: ret_value += (*string - 0x30); break;
  | 
19  |       case 2: ret_value += ((*string - 0x30) * 10); break;
  | 
20  |       case 3: ret_value += ((*string - 0x30) * 100); break;
  | 
21  |       case 4: ret_value += ((*string - 0x30) * 1000); break;
  | 
22  |       case 5: ret_value += ((*string - 0x30) * 10000); break;
  | 
23  |     }
  | 
24  |     i--;
  | 
25  |   }
  | 
26  | 
  | 
27  |   if (is_neg) // in negative Zahl umwandeln
  | 
28  |   {
 | 
29  |     ret_value *= (-1);
  | 
30  |   }
  | 
31  | 
  | 
32  |   //Bereich von Dezimalzahl prüfen und zurückgeben
  | 
33  |   if (ret_value > -32769 && ret_value < 32768)
  | 
34  |   {
 | 
35  |     *value = (int)ret_value; // Zahl zurückgeben
  | 
36  |     return 0;
  | 
37  |   }
  | 
38  | 
  | 
39  |   return -1;
  | 
40  | }
  | 
Solange der Wert zw. -39999 und 39999 schwankt, macht die Funktion, was 
sie soll. Liegt der Wert ausserhalb dieser Grenze kommt nur Müll raus 
(anstatt eines Fehlers '-1').
Irgendwie hab ich Tomaten auf den Augen, weil ich den Bug nicht finde.. 
:(
Bitte um Hilfe. - Danke!