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 :

Entier vers hexadecimale


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 56
    Par défaut Entier vers hexadecimale
    Bonjour tout le monde,

    Je voudrais copier l'equivalent d'un entier en hex dans un tableau. Voici ce que j'ai pour l'instant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    {
              char pin[16];
              int i = 12;
              memcpy(pin[0], &i, 2);
    }
    Un entier est déjà codé en hexa en mémoire (merci drobert) du coup le memcpy suffit.

    Cependant je n'arrive pas a obtenir 0x0c dans mon pin[0].
    Message d'erreur: 'memcpy' : cannot convert parameter 1 from 'char' to 'void *'

    Quelqu'a une idee du probleme ?

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    memcpy attend un pointeur vers la zone mémoire à remplir, or toi tu lui passes un caractère. Il faut passer pin, et non pin[0].

    Un entier est déjà codé en hexa en mémoire
    Un entier est un entier. Hexadécimal, décimal, octal ou binaire ne sont que des bases qui sont utiles lorsqu'on a besoin d'une représentation textuelle. D'ailleurs en mémoire ce n'est pas de l'hexadécimal, mais plutôt du binaire, symbolisé par des états électriques à l'intérieur de ta barette de RAM.

    En plus ton code est incorrect : selon l'endianess de ta machine le résultat sera différent. Si tu veux décomposer ton entier en plusieurs octets il faut utiliser les opérateurs de décalage (>>) et de ET bit à bit (&).

    Je ne te donne pas le code, il a été donné dans un post qui date d'hier ou avant-hier. A croire que vous aviez le même devoir à faire.

  3. #3
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 56
    Par défaut
    Citation Envoyé par Laurent Gomila
    Un entier est un entier. Hexadécimal, décimal, octal ou binaire ne sont que des bases qui sont utiles lorsqu'on a besoin d'une représentation textuelle. D'ailleurs en mémoire ce n'est pas de l'hexadécimal, mais plutôt du binaire, symbolisé par des états électriques à l'intérieur de ta barette de RAM.

    En plus ton code est incorrect : selon l'endianess de ta machine le résultat sera différent. Si tu veux décomposer ton entier en plusieurs octets il faut utiliser les opérateurs de décalage (>>) et de ET bit à bit (&).
    Ok, j'avais juste lu ca, merci de me corriger, je suis debutant en c++

    Citation Envoyé par Laurent Gomila
    Je ne te donne pas le code, il a été donné dans un post qui date d'hier ou avant-hier. A croire que vous aviez le même devoir à faire.
    Je vais chercher, merci.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Déjà, définis "codé en hexa".

    Un entier n'est pas "codé" ni "en hexa" en mémoire. Il est en mémoire sous sa forme primitive, intrinsèque, c'est tout. Pour l'ordinateur, 12, ce n'est pas "12", "1100", "C" ou "douze", c'est la valeur 12, ni plus, ni moins.

    Ce qui peut être "en hexa", "en binaire", ou "en décimal", c'est l'expression de cet entier dans une chaine de caractères.
    Et qui dit expression en chaîne dit std::ostream.

    Ou plus précisément, pour le mettre dans une chaîne de caractères en mémoire, on utilise un std::ostringstream pour créer une std::string.

    Edit: Grillé par Laurent...
    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.

  5. #5
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 56
    Par défaut
    Et sinon avec cette methode

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     int i = atoi((LPCTSTR)pinNumber);
     std::ostringstream iHex; 
     iHex << std::hex << i;
     pin[1] = iHex;
    J'obtiens:

    binary '=' : no operator defined which takes a right-hand operand of type 'class std::basic_ostringstream

    Tout ce que je veux c'est que si i est par exemple egal a 12, ca me metter 0x0c dans pin[1]...mais je n'arrive pas a trouver de solution.

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Par défaut
    Citation Envoyé par M4tthieu
    Et sinon avec cette methode

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     int i = atoi((LPCTSTR)pinNumber);
     std::ostringstream iHex; 
     iHex << std::hex << i;
     pin[1] = iHex;
    J'obtiens:

    binary '=' : no operator defined which takes a right-hand operand of type 'class std::basic_ostringstream

    Tout ce que je veux c'est que si i est par exemple egal a 12, ca me metter 0x0c dans pin[1]...mais je n'arrive pas a trouver de solution.
    ton "iHex" c'est un std::ostringstream, tu peux récupérer sa valeur en std::string en faisant iHex.str() . Tu peux le récupérer comme un type C "const char*" en faisant iHex.str().c_str() mais est-ce bien raisonnable?

    La première question à se poser, c'est de savoir si tu veux du C ( avec atoi(), char[] etc...) ou du C++ (avec std::ostringstream, std::string, std::hex..)?

  7. #7
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    La première question à se poser, c'est de savoir si tu veux du C ( avec atoi(), char[] etc...) ou du C++ (avec std::ostringstream, std::string, std::hex..)?
    Il ne veut faire aucune conversion, simplement mettre son entier dans un ou plusieurs chars
    Tout ce que je veux c'est que si i est par exemple egal a 12, ca me metter 0x0c dans pin[1]

  8. #8
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Par défaut
    ah ouais

  9. #9
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Question : est-ce que ton entier est dans l'intervalle [-128, 128] et donc tu peux le mettre directement dans un char, ou bien il est quelconque et il faudra le découper en plusieurs chars ? Si oui, dans quel ordre ?

  10. #10
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 56
    Par défaut
    Citation Envoyé par Laurent Gomila
    Il ne veut faire aucune conversion, simplement mettre son entier dans un ou plusieurs chars
    Oui c'est ca

    Bon j'ai peut etre trouve quelque chose qui fera l'affaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CString pin[16];
    int lPinNumber = strlen(pinNumber);		// length of the pinNumber
    CString length;
    length.Format("%X",lPinNumber);			// int to string Hex
    pin[1] = length;
    Ca semble marcher comme ca...Merci poru votre aide

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

Discussions similaires

  1. [Linux] Entier vers chaîne et inversément
    Par nelob dans le forum x86 32-bits / 64-bits
    Réponses: 0
    Dernier message: 08/05/2007, 11h10
  2. Conversion Entier vers Caractère.
    Par -= Cobra =- dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 04/12/2006, 11h05
  3. conversion entier vers chaine de caratères
    Par naima2005 dans le forum C++
    Réponses: 3
    Dernier message: 20/08/2006, 02h14
  4. Faire passer un dossier entier vers un serveur
    Par frol dans le forum Langage
    Réponses: 5
    Dernier message: 19/08/2006, 10h12
  5. Entier vers chaine
    Par litbos dans le forum C
    Réponses: 6
    Dernier message: 28/10/2005, 14h58

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