Prima di tutto, non è possibile sapere in anticipo dove il compilatore inserirà i byte di riempimento nella struttura per l'ottimizzazione delle prestazioni (allineamento riga cache, allineamento intero ecc.) In quanto dipende dalla piattaforma. Tranne, ovviamente, se stai pensando di creare l'app solo sulla tua piattaforma.
Ad ogni modo, nel tuo caso sembra che tu stia ricevendo dati da qualche parte (rete?) Ed è altamente probabile che i dati siano stati compressi (nessun byte di riempimento tra i campi).
Se si desidera tipograficamente la matrice su un puntatore di struttura, è comunque possibile indicare al compilatore di rimuovere i byte di riempimento che potrebbe aggiungere. Si noti che questo dipende dal compilatore che si usa e non è un'implementazione C standard. Con gcc, si potrebbe aggiungere questo dichiarazione alla fine della vostra definizione della struttura:
struct my_struct {
int blah;
/* Blah ... */
} __attribute__((packed));
Nota che interesserà le prestazioni per l'accesso utente, copiare ecc ...
Se non avete una buona ragione per fare ciò, non usare mai la cosa __attribute__((packed))
!
L'altra soluzione, che è molto più consigliabile, è quella di eseguire l'analisi autonomamente. Basta allocare una struttura appropriata e riempire i suoi campi cercando le buone informazioni dal proprio buffer.È probabile che una sequenza di istruzioni memcpy
faccia il trucco qui (vedere la risposta di Kerrek)
prova a leggere il buon numero di byte: 'char buf [sizeof (struct pacchetto)];' e con: 'leggi (fd, buf, sizeof (struct packet)); ' – Marcassin
@Marcassin: questo garantisce che il numero di byte letti sia uguale alla dimensione della struttura, ma non cambia i byte in ingresso e quindi non fa nulla per assicurare che abbiano padding o endianness che corrispondono al struttura. Se i byte in ingresso non hanno tre byte tra 'char type [1]' e 'float time1' ma la struttura lo fa, allora' read' è completamente rotto. –
Per motivi di bellezza, non digitare mai la frase "Please help me with the code." – Rerito