Zdravím,
řekněme že mám např. takovouto strukturu binární hlavičky nějakého souboru
typedef struct {
uint16_t chans;
uint32_t freq;
uint32_t ssize;
uint32_t blck;
uint64_t resv;
uint16_t amplt[256];
} MUSHeader;
a zajímalo by mě, jak se v praxi načítá. Vždycky mě totiž láká něco jako
fread(&header, sizeof(MUSHeader), 1, file);
což je sice elegantní řešení, kvůli různýmu paddingu ale ne správný. Nakonec tedy skončím u něčeho jako
fread(&header.chans, sizeof(header.chans), 1, file);
fread(&header.freq, sizeof(header.freq), 1, file);
fread(&header.ssize, sizeof(header.ssize), 1, file);
fread(&header.blck, sizeof(header.blck), 1, file);
fread(&header.resv, sizeof(header.resv), 1, file);
fread(&header.amplt, sizeof(header.amplt), 1, file);
což už se mi tak moc nelíbí. Navíc systémová volání jsou časově relativně drahá záležitost. Ještě mě napadlo načíst si to celý do paměti a pak to z ní postupně přiřazovat, ale to by bylo docela složitý.
Takže jak se to teda v praxi řeší efektivně i efektně?