Ho bisogno di creare una struttura con bitfield per incapsulare alcuni dati provenienti dall'hardware. Supponendo Uso meccanismi specifici compilatore per applicare l'imballaggio e l'ordinazione, è possibile creare una struttura simile alla seguente (non sintatticamente corretto):Campi bit nidificati in C/C++
typedef struct _BYTE_OF_DATA
{
uint8_t Reserved1 : 2;
struct
{
uint8_t BitWithSomeMeaning : 1;
uint8_t BitWithSomeOtherMeaning : 1;
} BitsWithMeaning;
uint8_t Reserved2 : 4;
} BYTE_OF_DATA, *PBYTE_OF_DATA;
static_assert(sizeof(BYTE_OF_DATA) == 1, "Incorrect size");
che possono poi essere letta come segue:
BYTE_OF_DATA byteOfData;
byteOfData.Reserved1 = 1;
byteOfData.BitsWithMeaning.BitWithSomeOtherMeaning = 0;
Lo schema esatto che ho descritto sopra non funzionerà, perché suppongo che la struttura BitsWithMeaning
debba iniziare a un limite di byte. Mi stavo chiedendo se c'è qualche altro trucco con cui posso ottenere questo "annidamento" di bitfield.
Sono consentiti i macro? Questo è C++ o C? Penso al C++ perché non penso che C abbia 'static_assert'. –
Poiché esiste un 'static_assert', suppongo che debba essere C++, quindi il tag C dovrebbe probabilmente essere rimosso. –
C ha 'static_assert' dal C11. E la domanda potrebbe anche essere rilevante per C. – Morwenn