您的位置:首页 > 其它

(C)struct结构体

2015-07-22 14:59 211 查看
对程序员的经验进行评估可以通过看其对struct结构体的使用情况。

会不会用struct,怎样使用struct,是区别一个开发人员是否具备丰富开发经历的标志。

在嵌入式系统的C/C++代码编程中,经常要传送的不是简单的字节流(char型数组),而是多种数据组合起来的一个整体,表现形式就是结构体。而经验不足的开发人员使用char型数组,通过指针偏移的方式进行报文传送。这样做一编写复杂,出错率高,可移植性差。

例:

传送A,B,C三种报文。

struct A
{
int a;
char b;
};

struct B
{
char a;
short b;
};

struct C
{
int a;
char b;
float c;
};

优秀的报文设计:

struct commu_packet
{
int packet_type;
union
{
struct A packetA;
struct B packetB;
struct C packetC;
};
};

这样在传送报文时就可以直接传送struct commu_packet.

假如发送函数原型如下:

//pSendData:要发送字节流的首地址
//iLen:    要发送的字节流长度
send(char *pSendData,unsigned int iLen)
{
......
};

j接收函数原型如下:

//pRcevData:接收字节流首地址
//ILen:     要接受字节流长度
//return:   返回实际收到的字节数
unsigned int recv(char *pRcevData,unsigned int iLen)
{
......
};

则,发送struct commu_packet的一个实例send_packet如下:

send((char*)&send_packet,sizeof(commu_packet));

接收保存在struct commu_packet的一个实例recv_packet如下:

recv((char*)&recv_packet,sizeof(commu_packet));

接着,判断报文类型并进行处理:

……
switch(recv_packet.packet_type)
{
case packetA:
……
break;
case packetB:
……
break;
case packetC:
……
break;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: