联合体是一种数据结构,其内部的成员共享同一块内存。应用这种方式可以简化多种复杂数据的处理。
比如接收一段16进制到的数据,根据帧头不同数据的含义不同需要进行解析;第一个字节为0x01时,后两个字节代表一个含义;第一个字节为0x02时,后四个字节代表另一个含义;第一个字节为0x03时,后3个字节代表另一个含义。首先定义几个结构体。
struct test_data1{
uint8_t header;
uint16_t data_xxx;
...
}__attribute__ ((__packed__));
struct test_data2
{
uint8_t header;
uint32_t data_xxx;
...
}__attribute__ ((__packed__));
struct test_data3
{
uint32_t header:8;
uint32_t data_xxx:24;
...
}__attribute__ ((__packed__));
typedef union