Problème de conversion int to char*

Bonjour,

Je fais une appli avec la quelle je dois paramétrer une date (l’année) en utilisant un bouton. La date change sur un écran LCD.
Pour simplifier, je décompose la date dans un tableau de manière à changer chacune des digit (chiffre de 0 à 9) de la date indépendamment de la suivante.

Concrètement :

J’envoie ma date dans un char*:

char *date_ref[4]={“1”,“9”,“8”,“4”};

puis j’incrémente le chiffre à chaque impulsion avec un %10 (modulo 10)
pour cela, je convertis le CHAR* en INT grace à :

int nb_convert = atoi(date_ref[menu_current-1]);
nb_convert++;

Mais je n’arrive pas à remettre le chiffre INT dans le tableau en CHAR*

date_ref[3]= nb_convert;

Pouvez-vous m’aider???

Bonjour,
Tu as une réponse de Kamill ICI

str = String(sendFailed,DEC);
date_ref[3]= String(nb_convert,DEC);

Bonjour,

@dmganges
Oui effectivement ce serait comme ça qu'on pourrait convertir si on voulait traiter la date comme TROYLECHAT à commencer à la faire, mais je crois qu'il est parti dans la mauvaise direction.

@TROYLECHAT
Tu ranges ta date non pas dans un char *, mais dans un char * (tableau de char *)
En fait c'est beaucoup plus simple d'utiliser une chaine de caractère (un tableau de char terminé par 0 en C)

 char date_ref[5];

  strcpy(date_ref,"1984");
  int nb_convert = date_ref[menu_current-1]-'0';  // ASCII -> numérique
  nb_convert++;
  date_ref[menu_current-1]=nb_convert+'0';        // numérique -> ASCII

Tu pourrais même directement incrémenter le code ASCII

  date_ref[menu_current-1]++;

bien sur il faut tester que ça ne dépasse pas '9' et que ce n'est pas en dessous de '0'

Tu pourrais aussi tout simplement gérer l'année sous sa forme la plus naturelle : un entier

int date_ref = 1984;

switch (menu_current)
{
  case 1 : date_ref += 1000;break;
  case 2 : date_ref +=  100;break;
  case 3 : date_ref +=   10;break;
  case 4 : date_ref ++;
}

Effectivement c'est une bonne idée

Ok merci à tous pour vos réponses.

J’ai fait un test avec la solution de DMGANGES.
J’obtiens un message d’erreur suivant: error: cannot convert ‘String’ to ‘char*’ in assignment

En fait, je crois que je n’ai pas trop saisie la différence entre STRING, CHAR, CHAR* et les variantes respectives sous forme de tableau (CHAR* etc)

En fait, à la base, je voulais ajouter dans ce tableau de CHAR* d’autres valeurs que des entiers inférieurs à 10. Celles-ci étaient des chaines de caractères.

Mais je crois que je vais devoir me résigner à modifier un peu mon approche et essayer la solution de KAMILL sur le tableau de char…

Merci pour tout

Oui désolé TROYLECHAT !

j'étais occupé par mon inscription sur le forum et son fonctionnement...
Je découvre Arduino à la retraite après des années d'informatique...
Je n'ai pas vérifié le code posté.

Ceci t'aidera peut-être à comprendre :

/*
  Conversions
*/

void setup() {
}

void loop() {
  char Str4[] = "1984";
  Serial.println(Str4);                 // 1984 c'est une chaîne
  Serial.println(Str4[3]);              // 4 un caractère de la chaîne
  Serial.println(String(Str4[3],DEC));  // 52 est bien la valeur ASCII de 4
  
  int nb = (Str4[3]);         //52 (valeur ASCII du caractère 4)
  nb++;                       //53 en ENTIER !
  
  Serial.println(nb);         //53 qui est la valeur ASCCI de 5
  Serial.println((char)nb);   //53 converti en CHAR on retrouve 5

  nb++;
  Serial.println(nb);         //54 qui est la valeur ASCCI de 6
  Serial.println((char)nb);   //54 NB 54 est le caractère suivant dans la suite ASCII donc :
                              // ATTENTION de ne pas sortir de l'intervale 0-9 SINON c'est n'importe quoi...

  Str4[3] = nb;
  Serial.println(Str4); //1986 C'est une chaîne
  
  Serial.println("");
  delay(5000);

}

Mais comme le fait remarquer kamill, ce n'est pas une bonne idée de manipuler une date de cette façon...

Regarde ce que ça donne lorsqu'on sort de l'intervalle 0-9 sur un digit...

Juste pour tester "Quick Edit More" à 10:08
Ne pas sortir de l'intervalle 0-9, revient à ne pas sortir de l'intervalle 48-57 des valeurs ASCII (en décimal)