Originariamente inviato da stejano
Caspita non ho mai lavorato con file aperti in Binary mode...sono un po' spaesato.
Guarda che non cambia niente... semplicemente il runtime non trasforma "di nascosto" le sequenze \r\n in \n.
Cosa intendi con "definirti le strutture rispetto ai vari pezzi del file"?
Puoi farmi un esempio?
I byte che trovi in file binari spesso e volentieri sono semplicemente la trascrizione su disco di determinate struct in memoria. Parlando di file MIDI, ad esempio, in testa al file c'è l'header MIDI. Per leggerlo puoi o usare fseek e fread per leggere i campi uno per volta, o definirti la sua struttura tramite una struct (che peraltro credo che gli header di Windows potrebbero già definire) e leggertela in memoria tutta insieme tramite fread:
codice:
/* Se si usa roba diversa da interi della dimensione nativa della piattaforma
è bene usare una direttiva pack (specifica del compilatore) per evitare problemi
di allineamento dei membri della struttura; qui uso la sintassi VC++ */
#pragma pack(push, 1)
struct MIDIHeader
{
uint32_t Signature;
uint32_t HeaderLength;
uint16_t Format;
uint16_t TrackChunks;
uint16_t Division;
};
#pragma pack(pop)
/* ... */
fp=fopen(/* ... */);
/* ... */
struct MIDIHeader mh;
if(fread(fp, &mh, sizeof(mh), 1, fp)!=sizeof(mh))
{
/* errore di lettura */
/* ... */
}
/* se le cose sono andate a buon fine, in mh ora ci sarà l'header MIDI del file */