Sto lavorando all'analisi del flusso di dati di rete, mi chiedo se non sia possibile mappare il flusso di dati direttamente alla struttura dati.C'è un modo per controllare il padding tra i membri della struct (incluso il campo di bit) in C++?
Ad esempio, voglio definire la struttura dati per un protocollo RTP come segue.
class RTPHeader
{
int version:2; // The first two bits is version.
int P:1; // The next bits is an field P.
int X:1;
int CC:4;
int M:1;
int PT:7;
int sequenceNumber;
int64 timestamp;
.....
};
e di utilizzarlo in questo modo.
RTPHeader header;
memcpy(&header, steamData, sizeof(header));
Ma, come il compilatore C++ inserirà imbottitura tra i membri, non v'è alcun modo per controllare che in modo che nessun padding vengono aggiunti tra i membri (tra cui i membri del campo di bit)?
Questa domanda NON è un duplicato di How to get rid of padding bytes between data members of a struct perché nel mio esempio ci possono essere campi di bit.
Credo non ci sia un modo standard per farlo, ma il compilatore potrebbe avere qualche estensione (ad es. VS ce l'ha) che ti permette di controllare il riempimento. Spero che qualcuno mi smentisca. –
I bitfield si sommano a un multiplo di 8, (non sorprendentemente). Se si ordina al compilatore di comprimere la classe/struct, si dovrebbe essere OK. –
Non penso che il padding sia aggiunto tra bitfield, vero? Sarebbe in qualche modo sconfiggere il punto di bitfield altrimenti. –