1、结构体对齐
按照结构体中最大字节元素的字节个数对齐,比方说有最大基本元素数据类型为int,按照4字节对齐。最大为short,按照2字节对齐。
typedef struct //最大的元素的基本数据类型为(int)4个字节
{
char numChar; //占据一个字节
int numInt; //第一个位只剩3字节,无法容下int,只能占据第二位(四字节为一个对齐单位)。
short numShort; //占据第三位,补上2个字节。
}test1; //sizeof(test1)=12;
typedef struct
{
int numInt;
char numChar;
short numShort;
}test2; //sizeof(test2)=8;
typedef struct
{
short numInt;
char hah;
short numShort;
char numChar;
}test3; //sizeof(test3)=8;
2、位域结构体
位结构体是一种特殊的结构体,在需访问某个字节或者某个字节的指定位的时候,位结构体比按位操作简便
typedef struct {
float adCheckValue; //AD判断阈值
int tianNum; //车号
struct{
char checkStatus : 4; //自检状态,占据第一个字节(char)的低四位。
char AlarmStatus : 4; //报警状态,占据第一个字节(char)的高四位。
ushort overFlowCnt : 8; //失稳溢出计数,占据第三个字节
ushort isOpen : 1; //占据第3个字节的第0位
}statusData;
}OriginalData;