JOchen schrieb:
> Heißt also das ich beim auslösen des Interrupts nach dem
> Abschlusszeichen zb. folgendes stehen hab: fehlernr[] = "22" und
> fehlerzeitpunkt[] = "3422"
> Dies sind ja char-Array nun möchte ich die zahlen halt in ein int array
> haben
Wenn du sie schon als String vorliegen hast, dann ist atoi() oder
strtol() die Funktion die du suchst.
Aber: Du musst ja nicht unbedingt erst einen String zusammenstellen:
Wenn nacheinander die Buchstaben '2' und '3' eintrudeln, dann kannst du
die ja ganz leicht zu einer Zahl zusammensetzen.
UM den Zahlenwert des 'Buchstabens' zu erhalten, ziehst du einfach vom
ASCII Code den Code für '0' ab und schon wird aus '6' die Ziffer 6 und
aus '2' wird die Ziffer 2.
Jetzt musst du nur noch mathematisch beobachten, wie man eine eine
bestehende Zahl, zb 372, eine nächste Ziffer, zb 8, 'hinten drann
hängt'.
Aus 372 und 8, soll also 3728 werden.
Das ist aber nicht weiter schwer.
Zahl = 10 * Zahl + Ziffer;
oder in deinem Fall dann eben
Zahl = 10 * Zahl + ( Buchstabe - '0' );
Und so kannst du dann, sobald eine Ziffer zu einer Zahl eintrifft, ganz
einfach die Zahl mit dieser Ziffer ergänzen. Noch eine kleine Logik
dazu, die feststellt zu welcher der beiden Zahlen die Ziffer gehört und
du hast es.
Der Vorteil den du hier hast besteht darin, dass du kein char-Array
brauchst, welches du erst mal sinnvoll dimensionieren musst.
1 | ...
|
2 | switch(data) {
|
3 | case '!':
|
4 | first = 1;
|
5 | Zahl1 = 0;
|
6 | Zahl2 = 0;
|
7 | break;
|
8 |
|
9 | case '§':
|
10 | first = 2;
|
11 | break;
|
12 |
|
13 | case '?':
|
14 | first = 0;
|
15 | break;
|
16 |
|
17 | default:
|
18 | if( first == 1 )
|
19 | Zahl1 = 10 * Zahl1 + ( data - '0' );
|
20 | else if( first == 2)
|
21 | Zahl2 = 10 * Zahl2 + ( data - '0' );
|
22 | }
|
23 |
|
24 | ...
|
ganz einfach und simpel.