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 :

double to char*


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 14
    Par défaut double to char*
    Bonjour,

    Je voudrais savoir comment caster un double en char*. En fait, le but de ma fonction c'est de lire dans structures (dont les champs sont des double), puis les stocker dans un fichier. Je sais que atof marche pour char* -> double.

    Merci d'avance

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 14
    Par défaut
    sprintf

    Trouvé

  3. #3
    Membre Expert
    Avatar de muad'dib
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 013
    Par défaut
    Salut,

    Tu peux utiliser sprintf pour convertir différents types vers des char*
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include <stdio.h>
     
    int main(void)
    {
    	char s[15] = {0};
    	double d = 123456789;
     
    	sprintf(s, "%.2lf", d);
     
    	printf("Resultat : %s\n", s);
     
    	return 0;
     
    }

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 228
    Par défaut .
    Bonjour dans la meme idée j'aimerais convertir un type de base (int, float,...) vers une chaine.
    Ok j'utilise sprintf, je fait mon char [256], mais si je veux etre plus fin.
    Allouer char [3] pour mon int i = 32, char[5] pour i = 1236 etc...
    Suis je obligé de compter les digits de mon entier ou existe il une voie plus subtile ?

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    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 393
    Par défaut
    Il y a plus subtil que le bête "comptage de digits" : Tu calcules le logarithme décimal du nombre, tu ajoutes 1 et tu as le nombre de chiffres. Puis tu ajoutes encore 1 pour le caractère nul.

    Tu as une fonction de calcul de logarithme déclarée dans <math.h>, mais j'ignore si c'est vraiment plus rapide qu'un bête comptage de digits par divisions successives...
    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
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Médinoc
    Il y a plus subtil que le bête "comptage de digits" : Tu calcules le logarithme décimal du nombre, tu ajoutes 1 et tu as le nombre de chiffres. Puis tu ajoutes encore 1 pour le caractère nul.

    Tu as une fonction de calcul de logarithme déclarée dans <math.h>, mais j'ignore si c'est vraiment plus rapide qu'un bête comptage de digits par divisions successives...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    /* (c) Eric Sosman 2001 */
    #define BIG_ENOUGH (1 + (sizeof(long) * CHAR_BIT + 2) / 3 + 1)

  7. #7
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    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 393
    Par défaut
    Emmanuel: Apparemment, chronos ne cherche pas à calculer la taille selon le type, mais selon la valeur...
    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.

  8. #8
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Médinoc
    Emmanuel: Apparemment, chronos ne cherche pas à calculer la taille selon le type, mais selon la valeur...
    Ca n'a pas beaucoup d'intérêt de mettre en branle un mécanisme dynamique complexe quand une simple macro permet de générer des tableaux de taille fixes correctement dimensionnés... (pour les entiers, il ne s'agit que de quelques bytes...)

  9. #9
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    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 393
    Par défaut
    Je le sais bien
    Ce n'est pas moi qui ai eu cette idée...

    PS: Si j'ai bien compris ta macro (enfin, celle d'Eric Sosman), elle compte systématiquement un chiffre pour 3 bits, donc elle marcherait aussi bien en octal, non ?
    (et dans toute base supérieure à 8, évidemment)

    PPS: Et naturellement, ça ne marche que pour les entiers.
    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.

  10. #10
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par Médinoc
    PS: Si j'ai bien compris ta macro (enfin, celle d'Eric Sosman), elle compte systématiquement un chiffre pour 3 bits, donc elle marcherait aussi bien en octal, non ?
    (et dans toute base supérieure à 8, évidemment)
    Oui.

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 228
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Ca n'a pas beaucoup d'intérêt de mettre en branle un mécanisme dynamique complexe quand une simple macro permet de générer des tableaux de taille fixes correctement dimensionnés... (pour les entiers, il ne s'agit que de quelques bytes...)
    Je ne suis pas sur de bien comprendre, à quel type de macro penses tu ?

    C'est sur que pour un entier ça n'a pas beaucoup d'interet d'allouer au plus juste, mais pour un type beaucoup plus grand le gain par allocation devient conséquent.

  12. #12
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par chronos
    Je ne suis pas sur de bien comprendre, à quel type de macro penses tu ?
    Bah, j'ai pas publié une macro ?
    C'est sur que pour un entier ça n'a pas beaucoup d'interet d'allouer au plus juste, mais pour un type beaucoup plus grand le gain par allocation devient conséquent.
    Si tu penses aux flottants, ça dépend non seulement de la valeur, mais en plus du format d'affichage désiré. Mais jusqu'ici, il était question d'entiers, j'ai donc donné une solution pour les entiers (C90). En C99, ll faudrait remplacer long par long long.

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

Discussions similaires

  1. double to char*
    Par tychus dans le forum C
    Réponses: 5
    Dernier message: 04/12/2011, 19h13
  2. Conversion type double en char
    Par piero53 dans le forum Débuter
    Réponses: 7
    Dernier message: 05/12/2010, 20h47
  3. Réponses: 1
    Dernier message: 17/06/2009, 18h18
  4. Réponses: 35
    Dernier message: 31/08/2008, 14h46
  5. Transformer une donnée double en char
    Par Chrysomallus dans le forum MATLAB
    Réponses: 2
    Dernier message: 18/04/2007, 16h12

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