Salut!

En tentant de lire l'entête d'un fichier BMP ainsi:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
FILE* bmpFile=fopen("c:/b.bmp","r");
char c1=0,c2=0;
int n=0;
fscanf(bmpFile,"%c%c%d",&c1,&c2,&n);
printf("%c%c\n%d\n",c1,c2,n);
l'affichage donne:

Or l'éditeur héxadécimal donne:
42 4D 36 28 00 00
Sinon,Ce qui donne bien : 'B' 'M' 10294 en lisant "00 00 28 36" car c'est en little endian.
Cette valeur est exactement celle fourni par Windows.

Même lu en big endian:
36 28 00 00 vaut 908 591 104 ce qui entre bien dans un "int".

Comment peut il sortir un 6?

Plus drôle encore:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
char buffer[10]={0};
fgets(buffer,6,bmpFile);
printf("%c%c\n%d\n",buffer[0],buffer[1],buffer[2]);
affiche 54.

Est-ce que la lecture ne peut se faire qu'avec "fread"?
Si oui pourquoi?
Sinon, comment bien utiliser "fscanf" pour ce type d'opération?

Merci de votre aide.