Char Array in Byte umwandeln

Hi zusammen,

ich bin in Sachen C-Programmierung noch SEHR unerfahren.
Habe viel PHP programmiert aber komme mit C irgendwie nicht klar.

Mein Problem:

Ich lese eine Text-DAtei aus, die z.B. folgenden Inhalt hat

0,1,2;1,4,5;

Das Auslesen mache ich so

char delimiter[] = ";,";
char preset_1_amp[1];
char preset_1_channel_voice[1];
char preset_1_channel_git[1];
char preset_2_amp[1];
char preset_2_channel_voice[1];
char preset_2_channel_git[1];

void auslesen() {
  myFile = SD.open("Test.txt", FILE_READ);
  
  while (myFile.available()) {
     bankinfo[ndx]=(char)myFile.read();
     ndx++;
  }

  myFile.close();
 
  ptr = strtok(bankinfo, delimiter);
    while(ptr != NULL) {
       switch (hck) {
        case 0:
          // preset 1 amp
          sprintf(preset_1_amp,"%s",ptr);
          break;
        case 1:
          // preset 1 channel (Voice)
          sprintf(preset_1_channel_voice,"%s",ptr);
          break;
      case 2:
          // preset 1 channel (Guitar)
          sprintf(preset_1_channel_git,"%s",ptr);
          break;
        case 3:
          // preset 2 amp
          sprintf(preset_2_amp,"%s",ptr);
          break;
        case 4:
          // preset 2 channel (Voice)
          sprintf(preset_2_channel_voice,"%s",ptr);
          break;
      case 5:
          // preset 2 channel (Guitar)
          sprintf(preset_2_channel_git,"%s",ptr);
          break;
        default:
          // preset 1 amp
          sprintf(preset_1_amp,"%s",ptr);
          break;
      }
    
      hck++;
      ptr = strtok(NULL, delimiter);
    }

}

Das funktioniert auch wunderbar, d.h. ich hab nun in den Char-Arrays preset_1_channel_git usw. die Werte drin, die ich brauche.

Nun will ich aber einen Midi-Befehl an ein Gerät senden, z.B.

MIDI.sendProgramChange(preset_1_channel_git, 1);

Die Funktion MIDI.sendProgramChange() erwartet aber als ersten Parameter eine Zahl vom Typ byte, und ich übergebe ja einen Char Array.

Könnt ihr mir helfen, wie ich aus dem Char Array den Byte bekommen?

Ich bin hilflos ;-((

Grüßle

Daniel

Es ist eigentlich nur Zufall, dass es wohl funktioniert, denn Du schreibst über die Arraygrenzen hinaus. Deine sprintf schreiben 2 Zeichen in die Arrays, die nur 1 Zeichen groß sind.

Sind Deine Werte immer nur einstellige Zahlen? Was sollst Du an den MIDI-Kanal senden, wenn Du eine 1 aus der Datei liest? Das Zeichen '1' oder die Zahl 1?

Gruß Tommy

Hey Tommy,

Nein die Werte können auch mal zweistellig sein. Übergeben muss ich eine Zahl vom Typ Byte also kein Zeichen

Lg Daniel

basementmedia:
Nein .............

Sage nicht "Nein", sondern glaube dem Tommy!

Wie du schon sagtest... hier ist nicht PHP, hier ist C++ angesagt, hier bist du selber für die Arraygrößen zuständig.

PHP erlaubt den schlampigen Umgang mit Datentypen.
Das fällt dir hier in C++ mit gnadenloser Härte auf die Zehen.

Ich glaube ihm ja, das Nein bezog sich auf seine Frage, ob die Zahlen nur einstellig sind. Das mit dem Array ändere ich. Aber ich glaube dadurch das Problem noch nicht gelöst zu haben.

Ich sagte ja, dass ich in Sachen C++ noch sehr unerfahren bin und daher auf eure Hilfe hoffe.

Die Midi Funktion will als Parameter den Typ Byte haben, da ich die Textdatei aber auslesen und mit strok splitte füttere ich das in eine char Array. D.h. ich muss nun irgendwie aus dem char array in den Datentyp Byte, oder?

Wäre super wenn ihr mich hier unterstützen könntet.

Lg Daniel

Wäre super wenn ihr mich hier unterstützen könntet.

Ich befürchte, dass du deinem "denken" eine andere Richtung wirst geben müssen.

z.B. dieses

char preset_1_amp[1];
char preset_1_channel_voice[1];
char preset_1_channel_git[1];
char preset_2_amp[1];
char preset_2_channel_voice[1];
char preset_2_channel_git[1];

ist eigentlich auch in PHP ein NoGo.

In C++ wird man sowas mit Strukturen und Arrays erledigen.

D.h. ich muss nun irgendwie aus dem char array in den Datentyp Byte, oder?

Suchst du vielleicht atoi() oder sscanf()?

@TO: und atoi() kannst Du auch direkt in der strtok-Schleife benutzen.

Gruß Tommy

Ahoi probier ich nachher gleich mal aus. Bin jetzt mit dem Sohnemann aufm Fußballplatz :slight_smile:

Und ja: Ihr habt mit allem Recht.
Bei PHP würde ich gar keinen Char Array verwenden sondern Strings...aber von denen wurde mir an anderer Stelle bei C++ abgeraten und eben stattdessen auf char arrays verwiesen.

Eine Frage noch zur Dimensionierung des Arrays: Müsste ich dann [2] nehmen oder? Da die Zahlen maximal zweistellig werden

Nutzstellenzahl + 1 für '\0' den Abschluss. Infos hier.
Wie ich bereits schrieb, brauchst Du diese Zwischen(char)arrays überhaupt nicht.

Gruß Tommy

Hat prima funktioniert, danke nochmal für eure Hilfe!
Ich werd mich definitiv in nächster Zeit etwas mehr in C++ einarbeiten, damit mir solche Anfängerfehler nicht nochmal passieren :wink:

Ich hab aber schon das nächste (Hardware)-Problem...siehe anderer Thread ;-(

Grüßle und schönen Abend euch.

Wenn es funktioniert, gebietet es das Prinzip der Foren, dass der funktionierende Sketch der Nachwelt zur Verfügung gestellt wird. Bitte stelle ihn hier in den Thread.

Gruß Tommy