Pergunta

Então, eu tenho um programa muito simples que lê os 3 primeiros bytes de um arquivo:

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 eu experimentá-lo com um arquivo de texto, ele funciona bem:

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

mas quando eu executar com um PNG, por exemplo, eu recebo:

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

Note que os 3 primeiros bytes do arquivo são, de fato, 89 50 4E, mas eu não sei onde 147 vem.Com um arquivo bmp eu recebo:

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

Você sabe onde estas primeiras posições vêm?Muito obrigado por sua ajuda

Foi útil?

Solução

Você precisa abrir o arquivo em modo binário:

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

Se você tentar ler um arquivo binário como um mapa de bits no modo de texto, os bytes correspondentes ao retorno de carro e alimentação de linha confundir as coisas.

Outras dicas

Por favor, olhe esta pergunta A leitura de bytes do arquivo bmp.

Parece que o problema está no modo de abri-lo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top