Pregunta

Así que tengo un programa muy simple que lee los 3 primeros bytes de un archivo:

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

Cuando lo intento con un archivo de texto, funciona bien:

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

Pero cuando lo ejecuto con un PNG, por ejemplo, obtengo:

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

Tenga en cuenta que los 3 primeros bytes del archivo son de hecho 89 50 4e, pero no sé de dónde proviene el 147. Con un archivo BMP que recibo:

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

¿Sabes de dónde vienen estas primeras posiciones? Muchas gracias por tu ayuda

¿Fue útil?

Solución

Debe abrir el archivo en modo binario:

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

Si intenta leer un archivo binario como un mapa de bits en el modo de texto, los bytes correspondientes a los retornos de carro y las líneas de línea confunden las cosas.

Otros consejos

Consulte esta pregunta Lectura de bytes de BMP .

Parece que el problema está en el modo de abrirlo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top