为了便于处理器寻址,数据的存储一般都有这样的限制。
数据的排列顺序一般在制定协议的时候需要考虑。
下面有些我常用的方法,不知道你适不适用,不是解决问题,只是为了便于编程。
(1)无法按照从大到小的顺序排列的数据域,可以在定协议的时候加上占位字节,比如
int aa;
char bb;
char rsv[n]; //n的大小取决于机器字节宽度,也就是编译器默认的对齐宽度;
int cc;
(2)无法更改协议的,结构体的定义只能使用字节作为数据域的单位,如
char aa[4];
char bb;
char cc[4];
发送端结构体变量赋值时和接收端结构体成员取值时使用宏定义。
#define SET_MEMBER_32(m, v) \
m[0] = (v>>0)&0xFF;\
m[1] = (v>>8)&0xFF;\
m[2] = (v>>16)&0xFF;\
m[3] = (v>>24)&0xFF;
#define SET_MEMBER_16...
同样定义GET_MEMBER_16 GET_MEMBER_32