Comment puis convertir uint8_t en char

Bonjour à tous,

Je dois passer une variable de type unint8_t dans une fonction qui demande un char

uint8_t pos = 1;
sprintln(pos,2);
void sprintln(uint8_t message, int logToSd)
{
  if(logToSd == 0 || logToSd == 2)
  { 
    SerialUSB.println(message); // ICI Ca affiche bien 1
  }
  
  if(logToSd == 1 || logToSd == 2)
  {
    #ifdef LOGGER
      sd_write(sd_logFile,(char *)message,true); // EN REVANCHE ici, la fonction sd_write va écrire un # à la place du 1 dans le fichier SD
    #endif
  }
}


void sd_write(char * fileName, char const * text, bool ln)
{
  #ifdef LOGGER
    if(isSdReady == true)
    {
      digitalWrite(PIN_SDLED, HIGH);
      
        logfile = SD.open(fileName, FILE_WRITE);

        // if the file opened okay, write to it:
        if (logfile) 
        {

          if(ln == true)
          {
            logfile.println(text);
          }
          else
          {
            logfile.print(text);
          }
          logfile.flush();
          // close the file:
          logfile.close();

        }
        else
        {
          // if the file didn't open, print an error:
          sprint(F("\nError opening "),0); sprintln(fileName,0);
        }
        
      digitalWrite(PIN_SDLED, LOW);

      // delay(100);
    }
  #endif
}

Je pensais que si pos est un int ou un uint8_t, il suffisait de mettre (char *) devant la variable pour le convertir en char comme ceci

char *c = (char *)pos;

Merci pour vos lumières

Bonjour,

Je ne comprends pas pourquoi tu veux convertir un uint8_t en pointeur vers un char. En fait si, je crois comprendre: c'est parce que tu vois une erreur du genre "invalid conversion from uint8_t to char*" donc tu crois qu'il suffit de changer le type... Mais c'est un peu plus compliqué que ça :slight_smile:

Le 2ème paramètre de la fonction sd_write est apparemment un string. Un string, c'est un tableau de char avec un '\0' à la fin.

Avec le langage C, quand une fonction requiert un paramètre de type tableau, en fait elle requiert un pointeur vers ce tableau (de même qu'une fonction ne peut pas retourner directement un tableau, mais un pointeur vers celui-ci). Un pointeur vers un tableau, c'est une variable qui pointe vers l'adresse mémoire du premier élément de ce tableau (donc le premier caractère, dans le cas d'un string).

La fonction sd_write va probablement écrire les caractères un par un dans le fichier, à partir du caractère stocké à l'adresse pointée, puis celui à l'adresse qui est juste après... jusqu'a ce qu'elle tombe sur un '\0', qui indique la fin du string.

Tu dois donc convertir ce uint8_t en string, avec la fonction itoa par exemple.

Ou tu pourrais peut-être aussi utiliser la librairie SD officielle, avec laquelle tu peux faire Fichier.print(message), exactement comme ton SerialUSB.println(message).

Hello,
Je te remercie pour ta grande réponse. C'est sympa.

Malheureusement, j'utilise adafruit Feather MO et la fonction itoa() n'est pas reconnue.

Mais dans un autre côté, je suis bete, car je pouvais résoudre mon problème avec sprintf()

Je m'excuse pour le dérangement mais milles mercis pour ton explication qui de toute manière est instructives!!!

Bonne jounrée!

De rien :wink: