Question

J'ai donc un programme très simple qui lit les 3 premiers octets d'un fichier:

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 j'essaie avec un fichier texte, cela fonctionne bien:

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

Mais quand je l'exécute 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 ne sais pas où le 147 vient. Avec un fichier BMP, je reçois:

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

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

Était-ce utile?

La solution

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 aux retours de chariot et aux lignes lignes confondes confondes.

Autres conseils

Veuillez regarder cette question lire des octets de fichier BMP .

ressemble à un problème est en mode d'ouverture.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top