我需要创建一个包含位域的结构体,以封装一些来自硬件的数据。假设我使用编译器特定的机制来强制打包和排序,那么是否可以创建类似以下结构体(不是语法上正确的):
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");
然后可以按照以下方式进行访问:
BYTE_OF_DATA byteOfData;
byteOfData.Reserved1 = 1;
byteOfData.BitsWithMeaning.BitWithSomeOtherMeaning = 0;
我上面描述的确切方案行不通,因为我猜测结构体BitsWithMeaning
需要从字节边界开始。我想知道是否有其他技巧可以实现位域的“嵌套”。
static_assert
。 - Mooing Duckstatic_assert
,我猜测这应该是C++,因此应该删除C标签。 - Paul Rstatic_assert
。该问题也可能与C语言相关。 - Morwenn