Int zu char conventieren

Hi an alle,
Ich wende mich wieder in größter Verzweiflung an euch. Ich habe viel recherchiert und eigentlich müsste es funktionieren, außer bei mir....

Mein Plan ist es ein Array zu erstellen in dem ein Dateiname gespeichert ist. Es sollen mehrere Daten von einer SD Karte aufgerufen werden, die sich nur durch eine Zahl Unterschieden. In diesem Fall heißt die Datei: myanim0.dat.

Was ich nun verzweifelt versuche ist, die Null in dem Array durch eine x beliebige zahl auszutauschen, in diesem Beispiel durch 1.

Mein Code dazu sieht wie folgt aus:

Int x = 1;
char buffer [33];

void setup (){
  Serial.beginn(9600);
}

void loop () {
  
  char c[] = {'m', 'y', 'a', 'n', 'i', 'm', '0', '.', 'd', 'a', 't', '\0'}
  
  itoa(x, buffer, 10);   // convertierung von int zu char 
  c[6] = buffer;          // einfügen von x an die 6. Stelle von c
  
  Serial.print(c);

}

Ich versuche in dem Sketch x zu einem char zu conventieren um es dann wie einen Buchstaben in den Array einzusetzen. Im Internet funktioniert die Funktion itoa() und wird als die beste Methode zum conventieren betitelt.
Habt ihr da eine Lösung für? Wäre eich echt dankbar, Danke im voraus schonmal.

Dein Array c ist zu klein, um noch zusätzliche Daten aufzunehmen. Deklariere es größer (auf die zu erwartetne Größe + 1.

Hänge die Umwandlung von itoa mit strcat hinten ran,

Gruß Tommy

Was hälst du von
C[6]='1';

char c[] = {'m', 'y', 'a', 'n', 'i', 'm', '0', '.', 'd', 'a', 't', '\0'}

Du musst nicht jeden Buchstaben einzeln schreiben. Das geht auch einfach als String-Literal

c[6] = buffer;

Du kannst C Strings nicht mit = zuweisen. Das sind im Prinzip nur Zeiger

Normalerweise macht man das mit snprintf():

void setup()
{
  Serial.begin(9600);

   char buffer[20];
   snprintf(buffer, sizeof(buffer), "myanim%d.dat", 0);
   Serial.println(buffer);
}

void loop()
{ }

Da kann man auch ganz einfach führende Nullen einfügen:

void setup()
{
  Serial.begin(9600);

  char buffer[20];

  for (byte i = 0; i < 12; i++)
  {
    snprintf(buffer, sizeof(buffer), "myanim%02d.dat", i);
    Serial.println(buffer);
  }
}

void loop()
{ }

Für printf() gibt es im Netz massig Anleitungen

Oder wenn du es per Hand stückeln willst:

void setup()
{
  Serial.begin(9600);

  char buffer[20] = "myanim";
  itoa(20, buffer + 6, 10);
  strcat(buffer, ".dat");
  Serial.println(buffer);
}

void loop()
{ }

itoa() will einen Zeiger auf einen Puffer. Wenn man also 6 dazu addiert kommt auf das Ende des Strings und die Zahl wird danach eingefügt

OK; Dann habe ich ihn falsch verstanden. Das funktioniert dann aber nur von 0 bis 9.
Ansonsten mehrere strcat oder sprintf.

Gruß Tommy

Die Konvertierung kann man schon mit itoa() machen wie ursprünglich gedacht. Man muss nur richtig mit C Strings umgehen können. Also etwas Zeiger-Arithmetik um die korrekte Position anzugeben

Ich habs mal Ende noch hinzugefügt.

Wow danke, werde das alles aber erst morgen ausprobieren. Es stimmt ich habe mich erst jetzt das erstmal an arrays und Strings ran getraut. Vielen Dank fürs erste, ich werde mich morgen nochmal melden!

Dann lass das mit den String Objekten besser gleich wieder und verwende nur char array als Zeichenketten.

void setup()
{
  Serial.begin(9600);

  char buffer[20];

  for (byte i = 0; i < 12; i++)
  {
    snprintf(buffer, sizeof(buffer), "myanim%02d.dat", i);
    Serial.println(buffer);
  }
}

void loop()
{ }

Wow, das ist genau das was ich mir vorgestellt habe. Ich danke dir und ich werde mich auf jeden Fall genauer mit der snprintf Funktion auseinander setzten.

Hahaha ja vielleicht sollte ich das mit den Strings auch lassen, aber für mehr als das habe ich sie auch nicht gebraucht.

Danke auf jeden Fall und ich bin froh darüber dass man im schlimmsten Fall sich auf euch verlassen kann.

[/quote]

ich bin froh darüber dass man im schlimmsten Fall sich auf euch verlassen kann.

Du darfst froh sein!
Aber auf uns/mich kann man sich nur im besten Fall verlassen.