|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Apr 2010
Messaggi: 67
|
[C] struct, fread e il misterioso caso di float
Ciao a tutti e perdonatemi il titolo pittoresco!
Mi trovo di fronte ad un caso stranissimo: ho una struct di questo tipo: Codice:
struct Data {
char txt[9];
float val;
..... (altri dati)
} data;
Poi in un altro momento voglio leggerne i primi due valori: apro il file e procedo con fread: Codice:
FILE *fh = fopen(......, "rb"); char tmp_txt[9]; float tmp_val; fread(&tmp_txt, sizeof(char), sizeof(tmp_txt), fh); res = fread(&tmp_val, sizeof(float), 1, fh); Workaround trovato fino ad ora: aggiungere Codice:
fseek(fh, 3, SEEK_CUR); Io sinceramente non me lo so spiegare; sarà che è la prima volta che scrivo float in binario, sarà che google non mi ha mostrato nulla di utile se non una questione relativa al padding delle struct... potrebbe essere? Spero possiate darmi qualche informazione in più! Vi ringrazio in anticipo |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: May 2006
Città: Salerno
Messaggi: 936
|
|
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Apr 2010
Messaggi: 67
|
'orcamiseria!
Grazie AngeL) per i link, il primo mi era sfuggito ed è molto utile. Ne approfitto per chiederti una cosa: la direttiva pragma la devo utilizzare al momento della definizione della struct? Quindi in un header file, nel caso la definissi lì? |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
|
C'e' un motivo se il compilatore padda, per cui se non serve non "impacchettare".
Alla fine ti basta leggere nello stesso modo in cui hai scritto: se scrivi i campi uno a uno leggi i campi uno a uno se scrivi la struttura in un colpo (e quindi hai padding), leggi la struttura in un colpo (e quindi hai padding). infine se il formato su disco e' specifico dell'applicazione... usa quel formato
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele |
|
|
|
|
|
#5 | |
|
Member
Iscritto dal: Apr 2010
Messaggi: 67
|
Quote:
Adesso capisco perchè gli header di diversi file sono suddivisi in blocchi di 4 byte Ringrazio tutti, ho risolto i miei dubbi. |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:38.




















