Pregunta

Tengo esta unión:

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 tiene un message_base como el primer campo y reply_message tiene un message_with_parameters como como el primer campo que a su vez tiene como message_base como el primer campo.
Así que, básicamente, puedo acceder a cualquiera de ellos y yo todavía obtener toda la necesidad de datos que, sin embargo estoy recibiendo un buffer de mi conductor y ahora quiero serializar en el mensaje.
Ya sé que el puntero a la memoria intermedia está mal como lo hará no se correlacionan con mis estructuras, pero no puedo tener un buffer de tamaño fijo.
En algún lugar a lo largo de la manera que quiero hacer esto:

m->buffer = buff->payload;

Y no importa qué tipo de datos de tipo I tienen, éste seguirá serializar.
¿Cómo puede hacerse esto?

EDIT:
Aquí están mis estructuras:

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;
¿Fue útil?

Solución

es porque los datos en el búfer no es parte de la unión.

buffer_t * buffer es un puntero, por lo que el puntero es parte de la unión, no a los datos de las que apunta a

probablly desea hacer algo como

 m =  (message*) buff->payload;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top