gpt4 book ai didi

c - c 和缓冲区中的多态性

转载 作者:太空宇宙 更新时间:2023-11-04 03:07:17 25 4
gpt4 key购买 nike

我有这个联盟:

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 有一个 message_base 作为第一个字段,reply_message 有一个 message_with_parameters 作为第一个字段依次将 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;

最佳答案

因为缓冲区中的数据不是 union 的一部分。

buffer_t* 缓冲区是一个指针,所以指针是 union 的一部分,而不是它指向的数据

你可能想做类似的事情

 m =  (message*) buff->payload;

关于c - c 和缓冲区中的多态性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3489651/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com