我不是新手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
类型。
我真的很困惑,老实说我不知道答案。 感谢。
答案 0 :(得分:4)
由于你的两个工会成员是匿名结构,这很复杂,但事实上,原则上,EXAMPLE_DATA
类型的对象只包含一个值成员 - 在任何给定时间写入的最后一个成员。该成员是__data
或两个匿名结构之一。
结构仅用作位域的容器,每个都是一个,并且因为它们是匿名的,所以可以通过访问类型EXAMPLE_DATA
本身的成员的语法在联合内部访问它们的成员。因此,如果您希望当前包含EXAMPLE_DATA
的成员是相应结构的data9bit
,那么您可以这样做:
EXAMPLE_DATA data;
data.data9bit = 256;
请注意,
答案 1 :(得分:0)
类型EXAMPLE_TYPE
的大小始终为2个字节(即16位),因为只能存储和寻址完整的字节。
您可以自由地将值解释为9位值,但大小始终是整数个字节。