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!