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 (unsigned int64)->string


Sujet :

C++

  1. #1
    Membre actif Avatar de Biosox
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 298
    Points : 203
    Points
    203
    Par défaut conversion (unsigned int64)->string
    Bonjour.

    J'ai un type définit comme suit: (c'est un mot de 64 bits, ou 2 mots de 32 bits)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    typedef union
    {
      //1 mot de 64 bits
      unsigned __int64 motEntier;
     
      //2 mots de 32 bits
      struct
      {
        unsigned int part1;
        unsigned int part2;
      }mot32;
     
    } Mot64;
    ça je ne peux pas y toucher!

    Maintenant, j'essaie de mettre un de ces mots dans un string, mais ça ne marche pas des façons que j'ai essayé:

    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
     
    //init de mon mot:
    Mot64 monMot;
    monMot.motEntier=982280960055126;
     
    //un petit oss pour la conversion, et un string:
    ostringstream oss;
    string monString;
     
    //mes essais:
     
    oss << monMot.motEntier;
    //compilation error: operator '<<' is ambiguous
     
    oss << (unsigned __int64) monMot.motEntier;
    //compilation error: operator '<<' is ambiguous
     
    oss << (double) monMot.motEntier;
    //compilation error: conversion from unsigned __int64 to double not implemented, use signed __int64
     
    oss << (signed __int64) monMot.motEntier;
    //compilation error: operator '<<' is ambiguous
     
    oss << (int) monMot.mot32.part1 << (int) monMot.mot32.part2
    //ca compile et execute, mais evidemment ne me donne pas le bon resultat
    Si quelqu'un a une idée je suis preneur, parce que la je sèche.
    Je suis bien allé voir la faq, comment convertir n'importe quel type d'objet en string, mais je ne comprend pas bien les classes templates.

  2. #2
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 264
    Points : 6 683
    Points
    6 683
    Billets dans le blog
    2
    Par défaut
    Pourquoi n'utilises-tu pas un simple sprintf ?

  3. #3
    Membre habitué
    Avatar de superspag
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 153
    Points : 186
    Points
    186
    Par défaut
    Chez moi ça marche trés bien

    Je crois que c'est juste un problème de configuration du compilateur.

    Si tu es sur Visual, vas dans
    - Propriétés de configuration
    - C/C++
    - Général
    - Déctection des pb de portabilité 64 bits : Oui (/Wp64)


  4. #4
    Membre actif Avatar de Biosox
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 298
    Points : 203
    Points
    203
    Par défaut
    @ r0d:
    ben pour finir j'ai fait un sprintf mais j'essaye d'éviter d'utiliser des fonctions C et de me mettre le plus possible à C++ (surtout pour apprendre C++ et oublier C quand c'est possible)


    @ superspag:
    merci beaucoup mais... ça marche pas.
    Je suis sur VisualC++ 6.0
    Dans "Project settings"->"C/C++"->"General",
    je n'ai pas de champ de "détécton de pb de portabilité".

    J'ai ajouté "/Wp64" dans "Project Options", mais à la compilation il y a une erreur:
    invalid numeric argument 'Wp64'
    Est-ce que quelqu'un sait ce que je dois faire?
    merci

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    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 379
    Points : 41 573
    Points
    41 573
    Par défaut
    L'option /Wp64 n'existe pas sous Visual 6, et le problème, c'est qu'il semblerait que sa STL ne supporte pas les __int64.

    Mon conseil: Passe par la fonction C sprintf()/_snprintf()/StringCchPrintf() (ou i64toa()) pour transformer ton entier 64bits en chaîne de caractères, et affiche la chaîne en question ensuite...

  6. #6
    Membre actif Avatar de Biosox
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 298
    Points : 203
    Points
    203
    Par défaut
    L'option /Wp64 n'existe pas sous Visual 6


    Merci. Je vais donc en effet rester au sprintf.

  7. #7
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 279
    Points : 11 015
    Points
    11 015
    Par défaut
    Un vieux code qui vaut ce qu'il vaut .... http://hermitte.free.fr/Info/C++/int64_h.html

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/04/2009, 17h46
  2. Conversion de char* en String^
    Par Sallie dans le forum MFC
    Réponses: 2
    Dernier message: 09/05/2006, 16h27
  3. Conversion tableau de caractères / String
    Par Jayceblaster dans le forum Langage
    Réponses: 3
    Dernier message: 21/04/2006, 11h21
  4. Conversion de char en string...
    Par Empty_body dans le forum Oracle
    Réponses: 2
    Dernier message: 20/03/2006, 14h34
  5. [Java]Conversion de float en String et inversement
    Par djoukit dans le forum Langage
    Réponses: 7
    Dernier message: 13/10/2005, 11h55

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