Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

C structs & fread

Name: Anonymous 2007-11-23 2:52

I have a struct i want to read in from file. To be specific its a windows bmp. It works when i read in the values individually, but when I try and read the structure as a whole it gets the wrong values:


struct BITMAPFILEHEADER{
    unsigned short bfType;        // size: 2
    unsigned int bfSize;        // size: 4
    unsigned short bfReserved1;    // size: 2 
    unsigned short bfReserved2;    // size: 2 
    unsigned int bfOffBits;    //size: 4
};

// works
fread (&fileheader.bfType,2,1,imgFile);
fread (&fileheader.bfSize,4,1,imgFile);
fread (&fileheader.bfReserved1,2,1,imgFile);
fread (&fileheader.bfReserved2,2,1,imgFile);
fread (&fileheader.bfOffBits,4,1,imgFile);

// does not work right
fread (&fileheader,sizeof(BITMAPFILEHEADER),1,imgFile);

Name: Anonymous 2007-11-23 8:21

1. Do not depend on specific sizes of int, shorts etc. Use stdint.h for that.
2. Do not read shit into a struct. The only guarantee about that is that you will get the same back if you wrote the struct with the exact same binary. Read shit into an array of u8_t's and extract the values from that.
3. Do not depend on the endianness of the computer. Use a macro to get shit by shifting the u8_t's (you can ifdef the macro to use type punning if appropriate).
4. Never believe something on the Internet without doublechecking.

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List