Proleme avec sprintf

Fermé
moi - 22 août 2009 à 20:08
 moi - 22 août 2009 à 23:33
Bonjour,
si je veux convertir un entier en chaine, je fais sprintf(ch,"%d",n)
si je veux convertir un entier en hexadecimal, je fais sprintf(hex,"%x",n)

Je ne comprends pas la logique associée : le nombre n est un int dans les 2 cas. or dans le 1er cas, ce qu'on met entre guillement est le type du membre de droite (ici n) alors que dans le 2nd cas on met celui du membre de gauche (ici hex).

Peut eter que mon probleme vient du fait que hexadecimal n'est pas un type mais une chaine de caractere, mais si quelqu'un pouvait m'expliquer clairement comment marche ce sprintf...

Merci

3 réponses

lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
22 août 2009 à 20:52
Salut,

sprintf c'est une fonction de formatage de la sortie qui écrit la sortie dans une chaîne de caractère.
Si tu veux convertir un int en hex tu dois écrire ta fonction pour conversion d'une base à autre.
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
22 août 2009 à 21:02
Re,

Un exemple
lami20j@debian:~/trash$ cat test_sprintf.c
#include<stdio.h>
#include<string.h>

int main()
{
        int n=65, n2=0xE6;
        char ch[10], hex[10], chex[20];
        sprintf(ch,"%d",n);
        sprintf(hex,"%X",n2);
        printf("ch =%s et hex =%s \n",ch,hex);
        printf("%d + %d = %d\n",n,n2,n+n2);
        /* si tu essais l'addition sur deux chaines tu auras un message
           à la compilation
           sprintf.c:16: error: invalid operands to binary + (have 'char *' and 'char *')
        printf("%d + %d = %d\n",ch,hex,ch+hex);
        */
        strcpy(chex,ch);
        strcat(chex,hex);
        printf("%s\n",chex);
        return 0;
}
lami20j@debian:~/trash$ gcc test_sprintf.c
lami20j@debian:~/trash$ ./a.out
ch =65 et hex =E6
65 + 230 = 295
65E6
0
Ok, merci lami20j, je crois avoir compris comment ca marchait
0