Domanda

Quindi ho un programma molto semplice che legge i 3 primi byte di un file:

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);
}
.

Quando lo provo con un file di testo funziona bene:

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

Ma quando lo eseguo con un PNG, ad esempio, ottengo:

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

Si noti che i 3 primi byte del file sono effettivamente 89 50 4e ma non so da dove proviene il 147. Con un file BMP ottengo:

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

Sai da dove vengono queste prima posizioni? Grazie mille per il tuo aiuto

È stato utile?

Soluzione

È necessario aprire il file in modalità binaria:

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

Se si tenta di leggere un file binario come una bitmap in modalità testo, i byte corrispondenti a ritorni a carrello e linementi confondono le cose.

Altri suggerimenti

Si prega di guardare questa domanda leggere byte dal file BMP .

Sembra che il problema sia nella modalità di apertura.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top