我不是新手C玩家,也不是我的专家。所以这是我的问题。我有一个工会声明如下:
typedef union
{
// 8-bit data
struct
{
UINT16 data8bit : 8;
};
// 9-bit data
struct
{
UINT16 data9bit : 9;
};
UINT16 __data;
} EXAMPLE_DATA;
还有一个功能如下:
SendData(EXAMPLE_DATA data)
{
//.....
}
现在这是我的问题。我想创建一个EXAMPLE_DATA
的对象,以便当它传递给SendData
函数时,我的数据将是data9bit
类型。
我真的很困惑,老实说,我不知道答案。谢谢。
由于你的两个工会成员是匿名结构这一事实很复杂,但事实上,原则上,EXAMPLE_DATA
类型的对象在任何给定时间只包含一个成员的值 - 最后写入的成员。该成员是__data
或两个匿名结构之一。
这些结构仅用作位域的容器,每个都是一个,并且由于它们是匿名的,因此可以通过访问类型为EXAMPLE_DATA
的成员的语法在联合内部访问它们的成员。因此,如果您希望EXAMPLE_DATA
当前包含的成员是相应结构的data9bit
,那么您可以这样做:
EXAMPLE_DATA data;
data.data9bit = 256;
请注意,
__data
的表示重叠)类型EXAMPLE_TYPE
的大小总是2个字节(即16位),因为只能存储和寻址完整的字节。
您可以将该值解释为9位值,但大小始终是整数个字节。