il y'a une fonction qui fait la conversion d'un entier vers un chaine caractere en c?
il y'a une fonction qui fait la conversion d'un entier vers un chaine caractere en c?
sprintf() ou snprintf().
Je rajouterais un peu de détails dans un exemple:
Ceci n'est pas testé...
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);
Pourquoi unsigned short ? int fait le travail, surtout avec "%d"...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 ?Envoyé par Bayard
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
car toto est d'abord promu en int, puis la fonction sprintf est appelé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 unsigned short toto; char titi[200]; sprintf(titi,"%d",toto);
M'enfin. C'est soit moi qui a mal compris, ou soit que ca semble légérement hérétique.![]()
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.Envoyé par Bayard
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
OK, autant pour moi:Je croyais avoir lu cela dans le Kernigham et Richie...— 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
Désolé...
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.
Partager