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] Convertir un double en chaine


Sujet :

C++

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Janvier 2006
    Messages : 47
    Points : 24
    Points
    24
    Par défaut [Conversion] Convertir un double en chaine
    Bonjour,

    Je voudrais convertir un double en chaine (jusque là pas de soucis) mais je voudrais également qu'il soit sous une forme hexadécimale ( du genre "FA284E.." )et non pas décimal comme c'est le cas actuellement en utilisant par exemple std::ostringstream ( ou printf en c )

    Merci d'avance

  2. #2
    Membre éclairé
    Avatar de Florian Goo
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    680
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 680
    Points : 858
    Points
    858
    Par défaut
    Bonjour,

    La réponse est dans la FAQ !
    Cours : Initiation à CMake
    Projet : Scalpel, bibliothèque d'analyse de code source C++ (développement en cours)
    Ce message a été tapé avec un clavier en disposition bépo.

  3. #3
    Membre à l'essai
    Inscrit en
    Janvier 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Janvier 2006
    Messages : 47
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par Florian Goo Voir le message
    Bonjour,

    La réponse est dans la FAQ !
    Oui mais ça ne marche pas, si j'écris pas exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    double d = 0.123456789;
    ostringstream os;
    os << std::hex << d;
    string s = os.str();
    j'obtiens s = "0.1234567"

  4. #4
    Membre à l'essai
    Inscrit en
    Janvier 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Janvier 2006
    Messages : 47
    Points : 24
    Points
    24
    Par défaut
    Tiens, en fait je viens de me rendre compte que ça marche pour les entiers, mais pas pour les double ni les float. Il faudrait que je convertisse mon double en entier en le multipliant par une puissance de 10 mais c'est pas terrible parce qu'après il faudrait que je code le fait qu'il y'a une virgule dans la chaine hexa, et je sais pas comment on fait ( en plus du fait que ça compliquerait pas mal ).

    Quelqu'un aurait -il une autre solution ?

    EDIT : Ca doit surement être possible car j'ai essayé de stocker un double dans un fichier binaire de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    	double d = 1.123456789;
    	FILE* pFile = fopen( "test.bin", "w" );
    	int nDoubleSize = sizeof(double);
    	fwrite( &d, nDoubleSize, 1, pFile );
    	fclose( pFile );
    et quand j'édite test.bin avec un éditeur hexadécimal, je trouve la valeur suivante dans le fichier : 36 96 73 D3 AD F9 F1 3F et quand je clique dessus, le convertisseur du programme me donne bien, dans la section 64 bits, le résultat : 1.123456789

  5. #5
    Membre à l'essai
    Inscrit en
    Janvier 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Janvier 2006
    Messages : 47
    Points : 24
    Points
    24
    Par défaut
    Bon j'ai trouvé un pis aller (mais du coup ce n'est plus du c++ ):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
           double d = 1.123456789;
    	char buff[ 32 ];
    	sprintf( buff, "%X%p", d );
    Maintenant, il me reste à voir si on peut aussi facilement passer d'une chaine hexa à un double...

  6. #6
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Points : 1 051
    Points
    1 051
    Par défaut
    Heu... on peut représenter des doubles en hexa ?

    hex
    Specifies that integer variables appear in base 16 notation.

  7. #7
    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
    Citation Envoyé par NiamorH Voir le message
    Heu... on peut représenter des doubles en hexa ?
    Oui, comme dans toute base numérique: 0xA1.2B = A*16^1 + 1*16^0 + 2*16^-1 + B*16^-2.
    Par contre, je ne connais pas de moyen d'avoir une sortie formatée de la sorte. Je craint qu'il ne faille la faire à la main! (ce qui pourrait avoir une place dans la FAQ par exemple).

  8. #8
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Points : 1 051
    Points
    1 051
    Par défaut
    Tout bête quoi. Mais je n'avais jamais vu ni eu besoin.

    Effectivement rien ne permet de le faire de base, mais c'est possible de le faire en deux étapes.

  9. #9
    Membre éclairé
    Avatar de Florian Goo
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    680
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 680
    Points : 858
    Points
    858
    Par défaut
    Archi> Ça c'est une représentation d'un nombre décimal en virgule fixe. Tout ce qu'il risque d'y avoir en natif, c'est la représentation mantisse/exposant, je pense…
    Cours : Initiation à CMake
    Projet : Scalpel, bibliothèque d'analyse de code source C++ (développement en cours)
    Ce message a été tapé avec un clavier en disposition bépo.

  10. #10
    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
    Citation Envoyé par Florian Goo Voir le message
    Archi> Ça c'est une représentation d'un nombre décimal en virgule fixe. Tout ce qu'il risque d'y avoir en natif, c'est la représentation mantisse/exposant, je pense…
    Tout a fait. C'était pour expliquer qu'on peut très bien avoir une représentation en hexa. Après, pour une représentation mantisse/expostant, il faut juste retranscrire de la base 10 à la base 16 (ou toute autre base qui te plaise)!

Discussions similaires

  1. Conversion d'un Float/double en chaine de caractères
    Par eclesia dans le forum Mathématiques
    Réponses: 2
    Dernier message: 09/11/2013, 09h53
  2. [Conversion]int to double
    Par frouge dans le forum Général Java
    Réponses: 6
    Dernier message: 03/02/2012, 09h34
  3. Convertir un tableau de chaine en tableau de Double
    Par Kartoon67 dans le forum LabVIEW
    Réponses: 1
    Dernier message: 25/05/2009, 19h47
  4. [Conversion]convertir int[] en bytes[]
    Par tony_big_guy dans le forum Langage
    Réponses: 5
    Dernier message: 02/05/2005, 15h47
  5. Réponses: 3
    Dernier message: 19/12/2004, 14h30

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