2010-07-09 5 views
1

J'ai donc un programme très simple qui lit les 3 premiers octets d'un fichier:erreur ftell après le premier appel à fread

 
int main(void) 

{ 

    FILE *fd = NULL; 
    int i; 
    unsigned char test = 0; 
    fd = fopen("test.bmp", "r"); 

    printf("position: %ld\n", ftell(fd)); 

    for (i=0; i<3; i++) { 
     fread(&test, sizeof (unsigned char), 1, fd); 
     printf("position: %ld char:%X\n", ftell(fd), test); 
    } 

    return (0); 
} 

Lorsque je tente avec un fichier texte, il fonctionne très bien:

 
position: 0 
position: 1 char: 61 
position: 2 char: 62 
position: 3 char: 63 

mais quand je le lance avec un PNG par exemple je reçois:

 
position: 0 
position: 147 char:89 
position: 148 char:50 
position: 149 char:4E 

Notez que les 3 premiers octets du fichier sont en effet 89 50 4E mais je Je ne sais pas d'où vient le 147. Avec un fichier bmp je reçois:

 
position: 0 
position: -1 char:42 
position: 0 char:4D 
position: 1 char:76 

Savez-vous où ces premières positions viennent? Merci beaucoup pour votre aide

Répondre

3

Vous devez ouvrir le fichier en mode binaire:

fd = fopen("test.bmp", "rb"); 

Si vous essayez de lire un fichier binaire comme un bitmap en mode texte, les octets correspondant au retour chariot et linefeeds confondre les choses.

+0

Merci pour votre réponse rapide! – bAp

Questions connexes