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

  1. #1
    Débutant  
    Profil pro
    Inscrit en
    mai 2005
    Messages
    2 606
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : mai 2005
    Messages : 2 606
    Points : 803
    Points
    803

    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
    5 402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : juin 2010
    Messages : 5 402
    Points : 23 384
    Points
    23 384

    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
    Membre expert
    Inscrit en
    mars 2005
    Messages
    1 323
    Détails du profil
    Informations forums :
    Inscription : mars 2005
    Messages : 1 323
    Points : 3 885
    Points
    3 885

    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
    2 606
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : mai 2005
    Messages : 2 606
    Points : 803
    Points
    803

    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
    Ingénieur systèmes embarqués
    Inscrit en
    juin 2009
    Messages
    3 908
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur systèmes embarqués

    Informations forums :
    Inscription : juin 2009
    Messages : 3 908
    Points : 10 752
    Points
    10 752
    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
    5 402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : juin 2010
    Messages : 5 402
    Points : 23 384
    Points
    23 384

    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, 17h59
  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, 20h58
  3. comment convertir un char[] en double
    Par groult jeremy dans le forum C++
    Réponses: 6
    Dernier message: 17/11/2005, 14h49
  4. Réponses: 6
    Dernier message: 28/10/2005, 12h11
  5. Réponses: 13
    Dernier message: 06/03/2005, 15h21

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