Komplettes Array in eine Switch Case Abfrage packen bzw. ASCI zu DEC wandeln

Einen schönen Montagmorgen wünsche ich falls das möglich sein kann :smiley:

ich möchte folgendes machen, ein Komplettes Array durch eine Switch Case Anweisung jagend damit ich die in den Einzelnen Indexen gespeicherten Werte ASCI zu DEC wandeln kann.

Da ich jetzt nicht für jede Indexdatei eine Komplette Switch Case Anweisung schreiben möchte wollte ich vorher fragen ob das auch anders geht.

Also nicht.:
switch (myArray[1] switch (myArray[2]....
.
.
.

sondern switch (myArray) also einfach das ganze Arry durch die Switch jagen.... gibt es dafür eine Lösung? Eigentlich will ich nur Zahlen zwischen 0-9 die in ASCI rein kommen über RS232 in DEC Wandeln und das bei 6 Indexdateien

grüße

Hi,
schon mal etwas von Schleifen gehört ?

uint8_t byte_array[150] = .... 

for(uint8_t i=0; i<150; i++) {

  switch(byte_array[i]) {
    case ... 
    case ...
  }
}

Wieso ist da ein SWITCH notwendig?
Ist da nicht ein IF besser?
Grüße Uwe

Uns hat man damals beigebracht das eine switch case Anweisung schneller als eine if Abfrage ist. Zudem würde ich das unter Geschmack einsortieren, was nun besser ist :wink:

Hallo,
ja ich dachte auch das eine Switch Case schneller ist.

Hi,
schon mal etwas von Schleifen gehört ?

Code:

uint8_t byte_array[150] = …

for(uint8_t i=0; i<150; i++) {

switch(byte_array*) {*

  • case …*
  • case …*
  • }*
    }
    [/quote]
    Zählt er jetzt 150 Indexdateien durch oder? und zu jeder führt er dann die case aus?
    Grüße

Ja, nur das er von 0 - 149 läuft.

Ansonsten schau mal hier:

Die For Schleife ist für Anfänger die einfachste, ansonsten kannst du mit allen das gleiche machen der ein verwendet DoWhile, der nächste nur While. Je nach dem wie es einem liegt oder ob man irgend einen spezial Fall mit abdecken will.

Jomelo:
Uns hat man damals beigebracht das eine switch case Anweisung schneller als eine if Abfrage ist.

Liegt daran, dass der Compiler das als einer Art Tabelle anlegen kann und über die Case-Nummer und Länge der Befehle einen Offset zu einer Sprunganweisung berechnen kann. Das heißt es sind keine Vergleiche nötig. Aber da gibt es auch ein paar feine Unterschiede zwischen Programmiersprachen.

In der for-Schleife noch mal switch zu machen ist aber nicht nötig. Du willst doch einfach nur jeweils -48/-0x30 machen und vom ASCII-Wert auf Dezimal zu kommen oder? Wieso machst du das nicht gleich beim Einlesen?

So ähnlich:
array[index] = Serial.read() - 48;

Serenifly:
In der for-Schleife noch mal switch zu machen ist aber nicht nötig. Du willst doch einfach nur jeweils -48/-0x30 machen und vom ASCII-Wert auf Dezimal zu kommen oder? Wieso machst du das nicht gleich beim Einlesen?

So ähnlich:
array[index] = Serial.read() - 48;

Vieleicht weil nicht alle übertragenen Zeichen Zahlen sind?
Aber auch in diesem Fall genügt ein einfaches
array[index] = Serial.read()
if(array[index] >47 && array[index]<59) array[index]-=48;

Grüße Uwe