Чтение двоичного файла, определенного структурой, очень просто.
Format myFormat;
fread(&myFormat, sizeof(Format), 1, fp);
#defines вообще не влияют на структуру. (Внутри странное место, чтобы положить их, хотя).
Однако это не кроссплатформенный сейф. Это самое простое, что может сработать в ситуациях, когда вы уверены, что читатель и писатель используют одну и ту же платформу.
Лучшим способом было бы переопределить вашу структуру следующим образом:
struct Format {
Uint32 str_totalstrings; //assuming unsigned long was 32 bits on the writer.
Uint32 str_name;
unsigned char stuff[4];
};
, а затем есть «platform_types.h», который правильно определяет Uint32 для вашего компилятора. Теперь вы можете читать непосредственно в структуру, но для проблем с порядком байтов вам все еще нужно
сделать что-то вроде этого:
myFormat.str_totalstrings = FileToNative32(myFormat.str_totalstrings);
myFormat.str_name = FileToNative32(str_name);
где FileToNative в зависимости от платформы является либо неработающим, либо байтовым реверсером.