一、结构体数据初始化
初始化方法很多,这里仅举例两种常用的初始化方法,如下:
struct {
int month;
int day;
int year;
}data;
data today={.month = 1,.year = 2};
data today={0,1,1};
二、联合结构体
typedef union
{
u8 buf[6];
struct {
u8 AA;
u8 BB;
u8 CC;
u8 DD;
u8 EE;
u8 FF;
}MSG;
}U_TEST;
代表buf[6]与下面的AA等公用一片地址,即buf[0]的地址等于AA的地址。
三、字节对齐
使用联合结构体作为数据接收时很好用,因为存储时是小端模式(即低位地址在前高位地址在后),对于多字节数据,只需要按小端模式发送数据,就可以直接组合数据使用,但是若字节量不对齐时,即出现 u8,u8,u8,u16,u8时,由于默认的编译方式,会将第三个u8保留u16的空间,从而解读数据时出现错误,此时可以使用#pragma pack来对齐数据,使用方法如下,参考站内链接也在下方:
typedef union
{
u8 buf[6];
#pragma pack(1)
struct {
u8 AA;
u8 BB;
u8 CC;
u16 DD;
u8 EE;
}MSG;
#pragma pack()
}U_TEST;
需要注意的是,如果结构体中定义一个其他结构体类型的变量,需要将定义的结构体也使用此关键词定义,否则可能造成数据指针错误使程序进入hardfault。