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 :

Conversion DWORD char*


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Inscrit en
    Octobre 2006
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 75
    Points : 35
    Points
    35
    Par défaut Conversion DWORD char*
    Salut.
    Je programme un serveur (sockets) et je doi envoyer un DWORD ,la fonction qui envoi les donneés recoi un pointeur vers un char,ya til une facon pour convertir un DWORD en char*,puis faire le contraire du coté client.
    j'ai essayé la fonction _ultoa,puis du coté client j'ai utilisé strtol en convertissant avec une base binaire,puis octal...,mais sa marche pas,le dword ne se recoi pas correctement.
    ya t'il une autre maniere.
    merci.

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Bonjour,
    Tout dépend de ce que tu veux envoyer :
    1/Le contenu envoyé est un DWORD - Ton problème : obtenir un pointeur char* car ta fonction d'envoi prend un couple de paramètres adresse bufffer/taille buffer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    void envoyer(DWORD valeur_)
    {
       DWORD valeur_reseau = htonl(valeur_);
       socket_send(reinterpret_cast<char*>(&dw_reseau),sizeof(valeur_reseau));
    // Attention l'adresse est valide dans la portée 
    // de la fonction uniquement
    }
    -> Penser à faire un ntohl de la valeur reçue.

    2/Le contenu envoyé est une chaîne de caractère : la FAQ est là pour toi

  3. #3
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Le fait que send() demande un char* est un bug de l'API Windows: send() est supposée demander un void*.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    En fait, la norme du C (je sais qu'on est dans le forum C++) même garantit que la conversion de n'importe quelle adresse d'un objet vers unsigned char * est faisable et vice-versa, comme avec void * (à un cast près pour éliminer les warnings des compilateurs dans le cas de l'utilisation de unsigned char *). Microsoft a étendu, pour son système Windows, cette règle aux char également, donc je ne dirais pas qu'il s'agit d'un bug (bien que j'aurais préféré la version à base de void *, comme c'est le cas par exemple dans l'API BSD).

    Pour le C++ standard, je ne sais pas. Winsock, comme la plupart des APIs de Windows, étant plus (d'un demi-gramme par exemple) destinée aux développeurs C que C++, le fait que send et recv demandent des char * ne peut pas être considéré comme un bug.

Discussions similaires

  1. [Debutant] conversion de char en int
    Par Marc_3 dans le forum Langage
    Réponses: 9
    Dernier message: 31/08/2011, 12h02
  2. Conversion de char en string...
    Par Empty_body dans le forum Oracle
    Réponses: 2
    Dernier message: 20/03/2006, 14h34
  3. Conversion DWORD
    Par obelix dans le forum C++
    Réponses: 7
    Dernier message: 27/10/2005, 17h54
  4. conversion int---->char
    Par andurand dans le forum C++
    Réponses: 10
    Dernier message: 30/05/2005, 17h36
  5. Réponses: 2
    Dernier message: 01/07/2004, 11h36

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