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 :

Convertir un double en char* (sans utilier sprintf)


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 14
    Par défaut Convertir un double en char* (sans utilier sprintf)
    Bonjour,

    Je voudrais savoir s'il est possible de convertir un double en chaine de caractères sans utiliser la fonction sprintf.
    Est-ce qu'il existe une fonction du genre "ftoa()".

    Je ne peux pas utiliser la fonction sprintf car mon application est exécutée dans un micro contrôleur et la fonction sprintf n'est pas la fonction standard et elle ne prend pas en compte les formats réel.

    Merci d'avance
    Kourov

  2. #2
    Membre émérite
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Par défaut
    Salut,

    Les fonctions _ecvt(), _fcvt() ou _gcvt()?

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mars 2006
    Messages : 117
    Par défaut
    sinon si tu ne trouves pas ton bonheur, ce genre de fonction se recode rapidement en C

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 14
    Par défaut
    Citation Envoyé par spoutspout Voir le message
    Salut,

    Les fonctions _ecvt(), _fcvt() ou _gcvt()?
    Dans quelle librairie se trouvent ces fonctions ?

  5. #5
    Membre éprouvé Avatar de hunta_kirua
    Profil pro
    Inscrit en
    Février 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 110
    Par défaut
    Bonjour,

    Je crois qu'un #include <stdlib.h> suffit.

    A+,

    Hunta

  6. #6
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    Citation Envoyé par spoutspout Voir le message
    Salut,

    Les fonctions _ecvt(), _fcvt() ou _gcvt()?
    ce sont des fonction posix .1 qui ne sont pas partie de la norme ISO.

    Si ton déja ton compilo n'implémente pas la norme ISO , il y peu de chance qu'il implémente POSIX .1..

    Ma fois, vérifie quand même...
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  7. #7
    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 vicenzo Voir le message
    ce sont des fonction posix .1 qui ne sont pas partie de la norme ISO.
    Les fonctions POSIX, n'ont pas de _ initiaux.

    Si ton déja ton compilo n'implémente pas la norme ISO , il y peu de chance qu'il implémente POSIX .1.
    Le compilateur implemente la partie de la norme ISO demandee pour les implementations free standing, ce qui semble normal pour un micro-controleur; et il est fournit avec une bibliotheque qui est un sous-ensemble de la bibliotheque standard.

    Aucune chance qu'il ait {e,f,g}cvt() si sprintf n'a pas les formats %e, %f, %g, POSIX expose des choses qu'on peut considerer comme des details d'implementations de ?printf (les e, f, g initiaux designent %e, %f, %g...)

  8. #8
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    Les fonctions POSIX, n'ont pas de _ initiaux.
    Je suis entièrement d'accord.

    les "_" sont souvent des extensions MS.

    En fait je faisais référence à ecvt(), fcvt() ou gcvt() qui sont posix.

    MS préfixe souvent les fonctions posix (du moins celles qu'il implémente !!) l avec "_".

    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    Le compilateur implemente la partie de la norme ISO demandee pour les implementations free standing, ce qui semble normal pour un micro-controleur; et il est fournit avec une bibliotheque qui est un sous-ensemble de la bibliotheque standard.
    Encore d'accord !

    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    Aucune chance qu'il ait {e,f,g}cvt() si sprintf n'a pas les formats %e, %f, %g, POSIX expose des choses qu'on peut considerer comme des details d'implementations de ?printf (les e, f, g initiaux designent %e, %f, %g...)
    C'est bien ce que je pressentais...
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  9. #9
    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 spoutspout Voir le message
    Les fonctions _ecvt(), _fcvt() ou _gcvt()?
    Pas du tout standard. Merci de fournir le code ou de dire où le trouver.

  10. #10
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    Citation Envoyé par kourov Voir le message
    Bonjour,

    la fonction sprintf n'est pas la fonction standard et elle ne prend pas en compte les formats réel.

    Merci d'avance
    Kourov
    Hum... précision sprintf() fait partie du standard C89... C'est le compilateur pour ton micro-controleur qui ne la supporte pas.

    sinon tu trouveras plusieurs implémentations sur Google Code Search
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  11. #11
    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 kourov Voir le message
    Je ne peux pas utiliser la fonction sprintf car mon application est exécutée dans un micro contrôleur et la fonction sprintf n'est pas la fonction standard et elle ne prend pas en compte les formats réel.
    Bizarre. Si ton compilateur supporte les nombre réels (à grand coup de bibliothèques), je ne vois pas pourquoi *printf() n'en ferait pas autant.

    Tu es sûr qu'il n'y a pas une option à activer quelque part ou à charger une bibliothèque spéciale ?

    Ça me rappelle le vieux bug des compilateurs Borland :

    http://emmanuel-delahaye.developpez....es.htm#borland

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 14
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Bizarre. Si ton compilateur supporte les nombre réels (à grand coup de bibliothèques), je ne vois pas pourquoi *printf() n'en ferait pas autant.

    Tu es sûr qu'il n'y a pas une option à activer quelque part ou à charger une bibliothèque spéciale ?

    Ça me rappelle le vieux bug des compilateurs Borland :

    http://emmanuel-delahaye.developpez....es.htm#borland
    En fait j'utilise des fonctions printf et sprintf qui ont été développé dans une bibliothèque de fonction TCP/IP et elle ne sont pas prévu pour des réel.
    Et en fait je n'ai pas encore réussi à les supprimer pour utiliser la fonction sprintf standard.

  13. #13
    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 kourov Voir le message
    En fait j'utilise des fonctions printf et sprintf qui ont été développé dans une bibliothèque de fonction TCP/IP
    Ah ouais. Y'a des flèches quand même dans ce métier... C'est quoi cette conception à la gomme ?
    et elle ne sont pas prévu pour des réel.
    Et en fait je n'ai pas encore réussi à les supprimer pour utiliser la fonction sprintf standard.
    et voilà le travail. Si tu retrouves le gars qui a écris ça, tu lui fous un coup de pied au c*l de ma part...

    Premier post de la journée, je sens ça va saigner...

  14. #14
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Par défaut
    Je ne sais pas pourquoi on va mettre plusieurs heures à chercher une fonction alors qu' on peut ecrire un code qui fait la meme chose en quelque minutes.

  15. #15
    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 darrylsite Voir le message
    Je ne sais pas pourquoi on va mettre plusieurs heures à chercher une fonction alors qu' on peut ecrire un code qui fait la meme chose en quelque minutes.
    Histoire de ne pas réinventer la roue... et puis un convertisseur de flottant en texte, c'est pas complètement trivial non plus...

    Il faut transformer la représentation binaire des types (signe, mantisse, exposant signé) en une valeur représentée en texte sous la forme décimale avec virgule fixe, le tout en utilisant l'arithmétique entière...

    Engage un prof de math...

  16. #16
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    Citation Envoyé par darrylsite Voir le message
    Je ne sais pas pourquoi on va mettre plusieurs heures à chercher une fonction alors qu' on peut ecrire un code qui fait la meme chose en quelque minutes.

    Personnellement, je suis curieux de voir la qualité et la fiabilité du code que tu pourrais écrire "en juste quelques minutes" pour convertir un double en une chaine de caractères sachant que cela doit s'exécuter de manière fiable et performante sur un micro-controleur.

    Alors relèves tu le défi (puisque c'est si trivial) ?

    Tu te chronomètres et nous poste le code ?
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

Discussions similaires

  1. convertir un tableau de char en double
    Par joffrey575 dans le forum C++
    Réponses: 7
    Dernier message: 26/03/2015, 09h25
  2. Convertir un double ou float en *char
    Par Nono Sto dans le forum Langage
    Réponses: 7
    Dernier message: 12/04/2010, 09h18
  3. convertir un Double en integer
    Par amelhog dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 17/08/2005, 09h08
  4. Convertir un TStrings en char
    Par syphicoque dans le forum C++Builder
    Réponses: 11
    Dernier message: 04/04/2004, 22h59
  5. Réponses: 3
    Dernier message: 02/07/2003, 16h24

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