|
问题的产生。由于设置变来那个等。等已成结构体能很方便赋值,但是在串口发送中需要以字节型数组发送。所以需要构建共同体。但是设置种类多。所以需求一种便捷的(自动)生成新typedef的方法。typedef定义以后,可以采程序中方便使用sizeof()来取得数据长度。
-------------------------------方法一------------------------------------
typedef struct {
unsigned char DA;
unsigned char SA;
unsigned char MCT;
unsigned char SCT;
unsigned char RKE[11];
unsigned char DC;
}DATA_COMM_HEAD_STRUCT;
typedef union {
DATA_COMM_HEAD_STRUCT head;
unsigned char buf[sizeof(DATA_COMM_HEAD_STRUCT)];
}DATA_COMM_HEAD_UNION;\
应用一
【可以作为程序输入和返回类型】
void(DATA_COMM_HEAD_UNION cc);
DATA_COMM_HEAD_UNION xxx;
xxx.head.DC
xxx.buf
----------------------------方法二----------------------------------
/* 宏自动变量定义,结构体构建成字节行共同体 */
#define UNION_BUF(type,name)\
union {\
type item;\
unsigned char buf[sizeof(type)];\
}name;
typedef struct {
unsigned int PCE;
unsigned int CRT;
unsigned int IQM;
}PRE_CHARGE_STRUCT;
应用二
【只能定义变量,不做函数传递】
UNION_BUF(PRE_CHARGE_STRUCT,xx);
sizeof(PRE_CHARGE_STRUCT);
xx.item.PCE
xx.buf
-------------------------方法三------
#define UNION(type,name)\
typedef union {\
type item;\
unsigned char buf[sizeof(type)];\
}name;
typedef struct {
unsigned int PCE;
unsigned int CRT;
unsigned int IQM;
}PRE_CHARGE_STRUCT;
UNION(PRE_CHARGE_STRUCT,PRE_CHARGE_UNION);//要在结构体类型后使用
应用三【也可以做函数传递】
PRE_CHARGE_UNION x;
sizeof(PRE_CHARGE_UNION)
x.item.PCE
x.buf
void h(PRE_CHARGE_UNION y); |
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|