English 中文(简体)
How to read a binary file and display the output as a float in C?
原标题:

I m trying to read 4-byte numbers stored in a binary file, but I don t seem to be getting the correct output. Here s my code:

#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
");
        }
        else
        {
            res = fread(&v, sizeof(v), 1, file);
            if(res==-1)
            {
                printf("Unable to open file input.dat
");
            }
            else
            {
                printf("v = %f
", v);
            }
        }

        return;
    }

My output is v = -961576900.0000000, but it should be v = 3.14159. Any ideas as to where my problem is?

NB. input.dat is the binary file: 11010000 00001111 01001001 01000000

Thanks

问题回答

Make sure fread returned the same value of sizeof(float), which is the size you are reading. Also make sure your file cursor is in the correct location, otherwise use fseek. Finally, was your file written in a big-endian machine? Was it saved correctly? The code seems ok for me.

In addition, you should be fclose(file) also. As for the float, floats are implementation defined.

Would you not consider doing it this way using format specifiers such as in the example below:

printf("%8.2f
",v);  

This formats the value of v to be 8 places and 2 decimal places after the period thereby rounding the float number to your expected output. It seems to me, that the binary file was written on a big-endian platform. Look here for how to do this and read here on this about endianess business.

Write a small program to test the endianess on the originating system where the binary file was created on and run it on your machine and check the results.

Hope this helps, Best regards, Tom.





相关问题
Fastest method for running a binary search on a file in C?

For example, let s say I want to find a particular word or number in a file. The contents are in sorted order (obviously). Since I want to run a binary search on the file, it seems like a real waste ...

Print possible strings created from a Number

Given a 10 digit Telephone Number, we have to print all possible strings created from that. The mapping of the numbers is the one as exactly on a phone s keypad. i.e. for 1,0-> No Letter for 2->...

Tips for debugging a made-for-linux application on windows?

I m trying to find the source of a bug I have found in an open-source application. I have managed to get a build up and running on my Windows machine, but I m having trouble finding the spot in the ...

Trying to split by two delimiters and it doesn t work - C

I wrote below code to readin line by line from stdin ex. city=Boston;city=New York;city=Chicago and then split each line by ; delimiter and print each record. Then in yet another loop I try to ...

Good, free, easy-to-use C graphics libraries? [closed]

I was wondering if there were any good free graphics libraries for C that are easy to use? It s for plotting 2d and 3d graphs and then saving to a file. It s on a Linux system and there s no gnuplot ...

Encoding, decoding an integer to a char array

Please note that this is not homework and i did search before starting this new thread. I got Store an int in a char array? I was looking for an answer but didn t get any satisfactory answer in the ...

热门标签