b777 a écrit :
Bonjour,
En bidouillant et en cherchant un peu sur le net, j'ai trouvé une "astuce" et ça resoud mon problème, sympa hein
C'est :
Code :
- fprintf(out,"%c",(char) i);
|
en mettant des parenthèses autour de char
Je voulais juste savoir à quoi servait ces parenthèses... si vous avez une explication ou un lien vers de la doc, je prend
merci 
|
francky06l a écrit :
C'est un cast, i est probablement un int et %c represente un char donc tu caste int en char.
|
Pour faire suite à "francky06l", le "cast" vient de l'anglais "cast" qui signifie "jouer un rôle" et qui a donné le "casting" au cinéma.
Ta variable "i" (mettons qu'elle soit "short" ) est considérée, à cet endroit, comme un "char" et les 8 bits de poid fort disparaissent. Si elle contient une valeur plus grande que 255, cette valeur est tronquée à "modulo 255".
Il existe des cast dits "implicites" car ils sont faits de façon naturelle
int a;
char b;
b=a; // Ici, "a" est implicitement converti en "char" pour être copié dans "b"
a=b; // Ici, "b" est implicitement converti en "int" pour être copié dans "a"
|
Le code que tu montres est un cast "explicite" car tu écris le type voulu toi-même. Dans ton cas à toi, il n'est pas obligatoire. Mais il peut l'être aileurs... Exemple:
int a=10;
int b=3;
double c;
double d;
c=a/b;
d=(double)a / (double)b; |
Si tu affiches "c", tu auras "3.00000" car "a" et "b" étant des "int", l'opération s'est faite en "int" et le résultat "3" a été casté en double.
En revanches, si tu affiches "d", tu auras bien "3.33333" car, pendant la division, "a" et "b" auront été considérés comme des "doubles".
De plus, comme durant une opération l'ensemble des valeurs est convertie dans le type le plus large de tous les types présents, on n'est pas obligé de mettre un cast sur les deux opérandes => "c=(double) a / b" est bien suffisant...