質問

私はこの組合を持っています:

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;
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top