Как прочитать двоичный файл и отобразить вывод в виде числа с плавающей запятой в C? - PullRequest
2 голосов
/ 02 декабря 2009

Я пытаюсь прочитать 4-байтовые числа, хранящиеся в двоичном файле, но я не получаю правильный вывод. Вот мой код:

#include <stdio.h>
#include <stdlib.h>

int main ()
    {
        int res;
        FILE *file;
        float v;

        //Open file
        file = fopen("prj3.dat", "rb");
        if (!file)
        {
            printf("Unable to open file input.dat\n");
        }
        else
        {
            res = fread(&v, sizeof(v), 1, file);
            if(res==-1)
            {
                printf("Unable to open file input.dat\n");
            }
            else
            {
                printf("v = %f\n", v);
            }
        }

        return;
    }

Мой вывод v = -961576900.0000000, но он должен быть v = 3.14159. Есть идеи, где моя проблема?

NB. input.dat - это двоичный файл: 11010000 00001111 01001001 01000000

Спасибо

Ответы [ 2 ]

4 голосов
/ 02 декабря 2009

Убедитесь, что fread вернул то же значение sizeof (float), то есть размера, который вы читаете. Также убедитесь, что курсор вашего файла находится в правильном месте, в противном случае используйте fseek. Наконец, ваш файл был записан на машине с прямым порядком байтов? Правильно ли сохранено? Код кажется мне подходящим.

0 голосов
/ 02 декабря 2009

Кроме того, вы также должны быть fclose(file). Что касается float, float определяется реализацией.

Не подумаете ли вы сделать это таким образом, используя спецификаторы формата, как в примере ниже:

printf("%8.2f\n",v);  

Это форматирует значение v, чтобы оно составляло 8 и 2 десятичных знака после периода, округляя число с плавающей запятой до ожидаемого результата. Мне кажется, что бинарный файл был написан на плате с прямым порядком байтов. Посмотрите здесь о том, как это сделать, и прочитайте здесь об этом по поводу бизнеса с бесконечностью.

Напишите небольшую программу для проверки порядка в исходной системе, в которой был создан двоичный файл, и запустите его на своем компьютере и проверьте результаты.

Надеюсь, это поможет, С наилучшими пожеланиями, Том.

...