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++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé 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
    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é
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    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 288
    Billets dans le blog
    2
    Par défaut
    Pourquoi n'utilises-tu pas un simple sprintf ?

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

    Informations forums :
    Inscription : Janvier 2006
    Messages : 153
    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 éclairé 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
    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
    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
    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...
    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.

  6. #6
    Membre éclairé 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
    Par défaut
    L'option /Wp64 n'existe pas sous Visual 6


    Merci. Je vais donc en effet rester au sprintf.

  7. #7
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 292
    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 292
    Par défaut
    Un vieux code qui vaut ce qu'il vaut .... http://hermitte.free.fr/Info/C++/int64_h.html
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

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