我有这个工会:
typedef union Message
{
message_base base;
message_with_parameters parameters;
reply_message reply;
buffer_t *buffer; // can't figure out what to put here
} message;
message_with_parameters
将 amessage_base
作为第一个字段,reply_message
将 amessage_with_parameters
作为第一个字段,然后将 a 作为message_base
第一个字段。
所以基本上我可以访问它们中的任何一个,我仍然会得到我需要的所有数据,但是我从我的驱动程序获得一个缓冲区,现在我想将它序列化到消息中。
我已经知道指向缓冲区的指针是错误的,因为它与我的结构无关,但我不能拥有固定大小的缓冲区。
在某个地方我想这样做:
m->buffer = buff->payload;
而且无论我有什么样的数据类型,它仍然会序列化。
如何做呢?
编辑:
这是我的结构:
typedef struct MessageBase
{
uint32_t u32DeviceID;
uint32_t u32CoreID;
uint16_t u16Class;
uint16_t u16CRC;
uint8_t u8OpCode;
void (*states [MAX_OPCODES]) (void *);
} message_base;
typedef struct MessageWithParameters
{
message_base base_class;
uint8_t u8Param1;
uint8_t u8Param2;
} message_with_parameters;
typedef message_with_parameters reply_message;
typedef union Message
{
message_base base;
message_with_parameters parameters;
reply_message reply;
} message;