Salut!![]()
En tentant de lire l'entête d'un fichier BMP ainsi:
l'affichage donne:
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);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2BM 6
![]()
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:
affiche 54.
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]);
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.![]()
Partager