IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

Comment convertir un uint8_t* en const char


Sujet :

C++

  1. #1
    Débutant  
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 093
    Points : 943
    Points
    943
    Par défaut Comment convertir un uint8_t* en const char
    Bonjour à tous,

    J'exécute un code que j'ai repris. Voci la partie qui me cause problème et tout particulièrement avec
    J'ai un problème de convertion et je ne sais pas comment convertir ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    uint8_t len  = sizeof(buf);
              uint8_t from = rf95.headerFrom();
              uint8_t to   = rf95.headerTo();
              uint8_t id   = rf95.headerId();
              uint8_t flags= rf95.headerFlags();;
              int8_t rssi  = rf95.lastRssi();
              if (rf95.recv(buf, &len)) {
                printf("Packet[%02d] #%d => #%d %ddB: ", len, from, to, rssi);
                printbuffer(buf, len);
     
    /* OLED */
    display.print("Packet[");
    //display.print(len);
    display.print("] ");
    display.print("#");
    //display.print(from);
    display.print("=>");
    //display.print(to);
    display.print(" ");
    display.print("rssi:");
    //display.print(rssi);
    display.print("\n");
    display.print(buf);
    display.print("\n");
    display.display();
     
              } else {
                Serial.print("receive failed");
                /* OLED */
                display.print("received failed\n");
                display.display();
              }
    Pourtant j'ai essayé ceci
    display.print((char*)buf);
    display.print((char*)to);
    etc..
    sans succès...

    Voici le message que je reçois pour le buf

    rf95_server.cpp:249:18: error: invalid conversion from ‘uint8_t* {aka unsigned char*}’ to ‘const char*’ [-fpermissive]
    display.print(buf);
    Comment convertir ceci?

    Merci pour vos lumières!
    Il ne suffit pas de tout savoir. Vouloir et persévérer, c'est déjà presque tout!

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 113
    Points : 32 958
    Points
    32 958
    Billets dans le blog
    4
    Par défaut
    Salut,
    reinterpret_cast existe pour ça.
    Et tu dois le convertir en const char* et non en char* comme tu as essayé.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut
    Moui.. sauf que ça devrait déjà fonctionner correctement avec le cast brut.

    Citation Envoyé par pierrot10 Voir le message
    Pourtant j'ai essayé ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    display.print((char*)buf);
    sans succès...
    « Sans succès », c'est-à-dire ? Comment sont déclarés buf et print ?

  4. #4
    Débutant  
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 093
    Points : 943
    Points
    943
    Par défaut
    Bonjour,
    Je vous remercie pour votre réponse.
    Dans l'intervale, j'ai trouvé cette solution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    snprintf(buf_print,bufprintsize,"%d",len);
    display.print(buf_print);
    //display.print(len);
    display.print("]\n");
    display.print("#");
     
    snprintf(buf_print,bufprintsize,"%d",from);
    display.print(buf_print);
    //display.print(from);
    display.print(" => ");
     
    snprintf(buf_print,bufprintsize,"%d",to);
    display.print(buf_print);
    //display.print(to);
    display.print("\n");
    display.print("rssi:");
     
    snprintf(buf_print,bufprintsize,"%d",rssi);
    display.print(buf_print);
    //display.print(rssi);
    display.print("\n");
     
    snprintf(buf_print,bufprintsize,"%s",buf);
    display.print(buf_print);
    //display.print(buf);
    display.print("\n\n");
    display.display();
    Ca marche bien !

    Je me demande alors si mon choix est bien puisque vous me proposez
    Qu'est-ce qu'il y a de différent (aventage/incovénient)

    Merci beaucoup
    Il ne suffit pas de tout savoir. Vouloir et persévérer, c'est déjà presque tout!

  5. #5
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 678
    Points
    13 678
    Billets dans le blog
    1
    Par défaut
    Ta solution a l'inconvénient d'avoir un coût à l'exécution (il faut copier les caractères) alors que le cast ne coûte rien.

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 113
    Points : 32 958
    Points
    32 958
    Billets dans le blog
    4
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    snprintf(buf_print,bufprintsize,"%s",buf);
    ce truc est complètement superflu, si buf peut être formaté en utilisant %s alors il s'agit d'une chaîne de caractères et le reinterpret_cast est mieux.
    Pour les autres cas, il s'agit de conversion donc t'as pas le choix (sauf à ce que print aient des surcharges pour accepter les types).
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. convertir un ansistring en const char*
    Par Freud44 dans le forum Débuter
    Réponses: 13
    Dernier message: 13/11/2008, 18h59
  2. [C# > C++] Comment convertir un sting^ vers un char* ?
    Par Elbarto dans le forum C++/CLI
    Réponses: 6
    Dernier message: 15/06/2006, 21h58
  3. comment convertir un char[] en double
    Par groult jeremy dans le forum C++
    Réponses: 6
    Dernier message: 17/11/2005, 15h49
  4. Réponses: 6
    Dernier message: 28/10/2005, 13h11
  5. Réponses: 13
    Dernier message: 06/03/2005, 16h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo