Proleme avec sprintf

moi -  
 moi -
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 21644 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
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 21644 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
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
moi
 
Ok, merci lami20j, je crois avoir compris comment ca marchait
0