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 de int vers chaine de caractere


Sujet :

C

  1. #1
    Membre averti
    Inscrit en
    Août 2007
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 13
    Par défaut conversion de int vers chaine de caractere
    il y'a une fonction qui fait la conversion d'un entier vers un chaine caractere en c?

  2. #2
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    sprintf() ou snprintf().

  3. #3
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    863
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 863
    Par défaut
    Je rajouterais un peu de détails dans un exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #include <stdio.h>
    unsigned short toto;
    char titi[200];
    sprintf(titi,"%d",toto);
    Ceci n'est pas testé...

  4. #4
    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 Bayard
    Je rajouterais un peu de détails dans un exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #include <stdio.h>
    unsigned short toto;
    char titi[200];
    sprintf(titi,"%d",toto);
    Ceci n'est pas testé...
    Pourquoi unsigned short ? int fait le travail, surtout avec "%d"...

  5. #5
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    863
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 863
    Par défaut
    De tête parceque "int" n'est pas portable, "short" si...

  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 Bayard
    De tête parceque "int" n'est pas portable, "short" si...
    Ah ? Je ne vois pas pourquoi short est plus portable que int. A quel problème penses-tu exactement ?

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 7
    Par défaut
    Ca serait ma foi assez surprenant, pour pas dire impossible, surtout sachant que le langage C prévoit la conversion systématique de toutes variables de type char et short apparaissant dans une expression en un type int. Ce qui ferait qu'une simple instruction comme celle ci ne serait meme pas portable

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    unsigned short toto;
    char titi[200];
    sprintf(titi,"%d",toto);
    car toto est d'abord promu en int, puis la fonction sprintf est appelé.

    M'enfin. C'est soit moi qui a mal compris, ou soit que ca semble légérement hérétique.

  8. #8
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    863
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 863
    Par défaut
    int dépend du type de processeur, short est toujours sur 2 octets.

  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 Bayard
    int dépend du type de processeur, short est toujours sur 2 octets.
    Voilà, c'est l'ânerie que je voulais entendre... Ben non. Que ce soit pour int ou pour short, la norme dit que la plage minimale garantie est -32767 à 32767. Point.

    Il n'existe pas de types portable avec tailles fixes (en bits) en C. Un short peut très bien faire plus que 16-bit.

    Par exemple avec les DSP Freescale (ex-Motorola) 56156, la plus petite zone mémoire adressable fait 32-bit, ce qui fait que

    sizeof char == sizeof short == sizeof int == sizeof long == 1 (char, soit 32-bit).

    Tu devrais lire la norme plus souvent...

    http://www.open-std.org/jtc1/sc22/wg...docs/n1124.pdf

  10. #10
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    863
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 863
    Par défaut
    OK, autant pour moi:
    — minimum value for an object of type short int
    SHRT_MIN -32767 // −(215 − 1)
    — maximum value for an object of type short int
    SHRT_MAX +32767 // 215 − 1
    — maximum value for an object of type unsigned short int
    USHRT_MAX 65535 // 216 − 1
    — minimum value for an object of type int
    INT_MIN -32767 // −(215 − 1)
    — maximum value for an object of type int
    INT_MAX +32767 // 215 − 1
    — maximum value for an object of type unsigned int
    UINT_MAX 65535 // 216 − 1
    Je croyais avoir lu cela dans le Kernigham et Richie...
    Désolé...

  11. #11
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    309
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 309
    Par défaut
    Et regarde ce qu'Emmanuel t'as marqué !
    Ce que tu as lu dans le K&R ce sont les plages de valeurs garanties. C'est-à-dire que les implémenteurs d'un compilateur C doivent faire des types qui ont au minimum ces plages de valeurs. Mais rien n'indique qu'ils doivent s'y tenir.
    Ils peuvent très bien faire des plages plus larges.

    Voilà ce qu'on peut lire dans la norme à propos des minima que tu as montré:

    The minimum magnitudes shown shall be replaced by implementation-defined magnitudes with the same sign.

Discussions similaires

  1. Cast unsigned int en chaine de caractere
    Par MeWaa dans le forum C
    Réponses: 5
    Dernier message: 06/05/2009, 09h58
  2. Réponses: 15
    Dernier message: 16/08/2007, 11h47
  3. conversion de int vers binaire
    Par ben83 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 12/02/2007, 19h19
  4. conversion tableau vers chaine de caractere
    Par sneb5757 dans le forum Réseau
    Réponses: 6
    Dernier message: 12/11/2006, 22h31
  5. conversion de int en chaine
    Par Midou dans le forum MFC
    Réponses: 4
    Dernier message: 19/02/2006, 14h15

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