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 :

problème de type int - DWORD - const char *


Sujet :

C++

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 81
    Points : 90
    Points
    90
    Par défaut problème de type int - DWORD - const char *
    bonjour,

    je suis en train de travailler sur un programme (scolaire) et j'ai des problème avec la converstion de mes type. En effet, le prof nous donne deux fonctions que l'on doit appeler et celle-ci prenne en argument de const BYTE* ou DWORD en paramètre.

    Quand je tente des les appeler via les appels suivant j'ai des erreur comme quoi il est impossible de convertir (un const char *to const BYTE*).

    Les appels de fonctions se font de la façon suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    a("bonjour"); // prends en const char*
    b(10); // prends un DWORD)
    comment faire pour ne plus avoir le problème ?

    PS: je ne sais pas si le problème peut venir du compilateur mais j'utilise code::blocks avec mingw.

    merci.

  2. #2
    Membre émérite

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Points : 2 252
    Points
    2 252
    Par défaut
    Bonjour,
    Citation Envoyé par dams77
    il est impossible de convertir (un const char *to const BYTE*).
    BYTE est presque tout le temps défini comme un typedef d'unsigned char. Donc un BYTE* c'est presque tout le temps un pointeur vers un tableau d'octet "brut" et pas une chaine de caractère.

    [Edit] j'ai grillé ram-0000 (mais sa réponse est meilleure. )

  3. #3
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Tu aurais pu nous mettre le message d'erreur émis par le compilateur, cela éviterai de jouer aux devinettes.

    Cas 1, la fonction attend un const BYTE *.
    BYTE est souvent une redéclaration de unsigned char donc une valeur non signée sur 1 octet valant entre 0 et 255.

    Un char * ("bonjour" est un char *) ne peut se transformer naturellement en BYTE * d''où ton problème. Maintenant,
    • soit tu sais ce que tu fais et tu castes ton char * en BYTE * et tant pis pour toi (ou pour le programme plutôt) si tu fais des bêtises,
    • soit tu fais une erreur en appelant cette fonction avec un char * parce que cela n'a pas de sens.


    Pour le cas 2, c'est un peu pareil.
    DWORD est souvent une redéclaration de "unsigned long" donc une valeur positive ou nulle sur 4 octets.

    Le nombre 10 tel que tu l'as écrit est considéré par le compilateur comme un int, c'est à dire un nombre signé.

    Le message d'erreur (ou de warning) que tu reçois, c'est que tu essayes de mettre un nombre signé dans une valeur non signée.

    Encore une fois, soit tu castes, soit tu fais une erreur en utilisant cette fonction ou en utilisant la fonction comme tu le fais.

    [Edit] Grillé par Arzar (mais ma réponse est plus longue)
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  4. #4
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par ram-0000 Voir le message
    Le nombre 10 tel que tu l'as écrit est considéré par le compilateur comme un int, c'est à dire un nombre signé.

    Le message d'erreur (ou de warning) que tu reçois, c'est que tu essayes de mettre un nombre signé dans une valeur non signée.
    Il n'y a aucune raison d'avoir une erreur ou un warning dans ce cas de figure. On passe dans les règles de conversion implicite.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 81
    Points : 90
    Points
    90
    Par défaut
    je viens d'essayer une autre solution mais j'ai les même résultats. au lieu de passer directement les valeurs (qui dans mon cas sont des constantes), j'ai voulu utiliser des define:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #define VA "bonjour"
    #define VB 10
    void mafonction(){
         a(VA);
         b(VB);
    }
    et même avec ce morceau de code j'ai des erreurs. Enfin bref, je vais directement passer le type DWORD et const BYTE* pour faire ce que je souhaite...

    merci.

  6. #6
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Que tu passes les constantes par le préprocesseur ou en dur dans le code ne change pas le problème.

    Citation Envoyé par dams77 Voir le message
    et même avec ce morceau de code j'ai des erreurs
    Encore une fois : quelles erreurs. Quels sont les messages d'erreur complets.

    Aide-nous à t'aider.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 81
    Points : 90
    Points
    90
    Par défaut
    invalid conversion from 'int*' to 'DWORD *' et invalid conversion from 'const char *' to 'const BYTE*'

  8. #8
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par dams77 Voir le message
    invalid conversion from 'int*' to 'DWORD *'
    C'est possible de voir la déclaration du constructeur de a() car tu passes un int (10 est un int) et le compilateur râle après un "DWORD *", il y a un problème dans l'utilisation.

    Citation Envoyé par dams77 Voir le message
    invalid conversion from 'const char *' to 'const BYTE*'
    Comme dit plus haut, un const char * ne peut se transformer implicitement en const BYTE *. Il faut caster.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

Discussions similaires

  1. conversion de types DWORD const char *
    Par koukou11 dans le forum VC++ .NET
    Réponses: 3
    Dernier message: 04/03/2011, 01h43
  2. Réponses: 8
    Dernier message: 07/05/2008, 09h57
  3. Problème de buffer avec des int et des char
    Par Lolita59 dans le forum Réseau
    Réponses: 23
    Dernier message: 04/05/2006, 11h09
  4. [ tinyint et char ] problème de type
    Par shirya dans le forum Installation
    Réponses: 3
    Dernier message: 05/11/2005, 07h08
  5. Réponses: 6
    Dernier message: 28/10/2005, 12h11

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