代码之家  ›  专栏  ›  技术社区  ›  the_drow

c和缓冲区的多态性

  •  1
  • the_drow  · 技术社区  · 14 年前

    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 带有参数的消息 作为第一个领域 信息库 作为第一个领域。
    所以基本上我可以访问它们中的任何一个,我仍然可以得到我需要的所有数据,但是我从我的驱动程序得到了一个缓冲区,现在我想把它序列化到消息中。
    我已经知道指向缓冲区的指针是错误的,因为它不会与我的结构相关联,但是我不能有一个固定大小的缓冲区。
    在路上的某个地方我想这样做:

    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;
    
    1 回复  |  直到 12 年前
        1
  •  2
  •   Keith Nicholas    14 年前

    buffer\u t*buffer是指针,因此指针是联合的一部分,而不是它所指向的数据

    你可能想做些

     m =  (message*) buff->payload;