ошибка после первого вызова фреда - PullRequest
1 голос
/ 09 июля 2010

Итак, у меня есть очень простая программа, которая читает 3 первых байта файла:

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

Когда я пробую его с текстовым файлом, он отлично работает:

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

но когда я запускаю его с PNG, например, я получаю:

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

Обратите внимание, что 3 первых байта файла действительно 89 50 4E, но я не знаю, откуда взялись 147.С файлом bmp я получаю:

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

Вы знаете, откуда взялись эти первые позиции?Большое спасибо за вашу помощь

Ответы [ 2 ]

3 голосов
/ 09 июля 2010

Вам необходимо открыть файл в двоичном режиме:

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

Если вы попытаетесь прочитать двоичный файл, такой как растровое изображение, в текстовом режиме, байты, соответствующие возврату каретки и переводу строки, запутывают вещи.*

0 голосов
/ 09 июля 2010

Пожалуйста, посмотрите на этот вопрос Чтение байтов из файла bmp .

Похоже, проблема в режиме его открытия.

...