View Single Post
Old 09-12-2005, 11:11   #4
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da mfonz85
Ma in particolare, poi avendo a portata di mano la struttura del file wav e il formato con cui devo leggere i dati, quindi poi va bene l'uso di fread() giusto?
Se hai scelto la strada "fai da te" , va benissimo usare la funzione fread().

Quote:
Originariamente inviato da mfonz85
Ho dato meglio un'occhiata alla fread e ho letto che è fatta così
size_t fread(void *ptr, size_t dim, size_t nmemb, FILE *stream)
solo che non riesco a capire bene come devo usare "dim" e "nmemb"...ho anche spulciato fra gli header, ma ho trovato niente sullo struct "size_t"...
Innanzitutto size_t non è una struttura. È un tipo di dato (definito in genere con una typedef negli include della libreria standard del "C") che rappresenta un numero intero senza segno. È il tipo restituito dall'operatore sizeof.

Per quanto riguarda la fread() ed anche l'opposta fwrite(), i due parametri dim e nmemb servono per specificare alle due funzioni quanti byte leggere/scrivere secondo la seguente formula: dim * nmemb;
In pratica leggono un certo numero di blocchi specificato da nmemb, ognuno di lunghezza dim. Nota importante: le due funzioni restituiscono un valore di tipo size_t che indica il numero di elementi letti. Se metti dim=10 e nmemb=2 e la fread va a buon fine cioè legge 20 bytes, ti restituisce 2 (non 20!!).

Ti faccio subito un esempio per la lettura del primo blocco RIFF del file wave (nota, presuppongo l'utilizzo in Windows, poiché userò dei tipi di dati definiti nel Platform SDK di Windows):

Codice:
#pragma pack(1)

typedef struct
{
    CHAR  id[4];
    DWORD length;
} RIFF_HEADER;

#pragma pack()



RIFF_HEADER riff_hdr;
size_t len_read;

len_read = fread (&riff_hdr, 1, sizeof (RIFF_HEADER), f);

if (len_read == sizeof (RIFF_HEADER))
{
    ..ok lettura corretta..
}
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso