【发布时间】:2020-12-06 17:30:02
【问题描述】:
例如,如果我有这样的结构:
typedef struct __attribute__ ((packed))
{
uint16_t ObjectPropertyCode;
uint16_t DataType;
uint8_t GetSet;
union
{
uint8_t DefaultValue_u8 ;
uint16_t DefaultValue_u16 ;
uint32_t DefaultValue_u32 ;
}DefValue ;
uint32_t GroupCode;
uint8_t FormFlag;
}
MTP_ObjectPropDescTypeDef;
我只需要 DefValue 中的一个元素,这取决于我的 DataType。 例如,如果我的 DataType 是 uint16 ,那么我将像这样发送我的结构:
typedef struct __attribute__ ((packed))
{
uint16_t ObjectPropertyCode;
uint16_t DataType;
uint8_t GetSet;
uint16_t DefaultValue_u16 ;
uint32_t GroupCode;
uint8_t FormFlag;
}
MTP_ObjectPropDescTypeDef;
【问题讨论】:
-
如图所示,
DefValue的大小将始终保持uint32_t,无论您分配什么,但您需要知道存储的类型,以便准确检索存储在那里的最后一个值。 -
我(可能是错误地)认为问题在于将数据与中间的可变大小成员紧密地打包在一起。
-
是的,你是对的@vmt,在MTP规范(媒体传输协议)中,这个值可以是不同的类型,并且结构必须定义好,才能被主机识别。
-
嗯,这仍然不能说明整个故事,即主持人识别它意味着什么?如果您的意思是 DefaultValue 必须具有不同的大小,请在下面查看我的答案。
标签: c struct dynamic union mtp