Cおよびバッファーの多型
-
28-09-2019 - |
質問
私はこの組合を持っています:
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;
解決
バッファ内のデータが組合の一部ではないためです。
buffer_t*バッファーはポインターであるため、ポインターは組合の一部であり、それが指すデータではありません
あなたはおそらく次のようなことをしたいと思っています
m = (message*) buff->payload;
所属していません StackOverflow