(C)struct结构体
2015-07-22 14:59
211 查看
对程序员的经验进行评估可以通过看其对struct结构体的使用情况。
会不会用struct,怎样使用struct,是区别一个开发人员是否具备丰富开发经历的标志。
在嵌入式系统的C/C++代码编程中,经常要传送的不是简单的字节流(char型数组),而是多种数据组合起来的一个整体,表现形式就是结构体。而经验不足的开发人员使用char型数组,通过指针偏移的方式进行报文传送。这样做一编写复杂,出错率高,可移植性差。
例:
传送A,B,C三种报文。
优秀的报文设计:
这样在传送报文时就可以直接传送struct commu_packet.
假如发送函数原型如下:
j接收函数原型如下:
则,发送struct commu_packet的一个实例send_packet如下:
send((char*)&send_packet,sizeof(commu_packet));
接收保存在struct commu_packet的一个实例recv_packet如下:
recv((char*)&recv_packet,sizeof(commu_packet));
接着,判断报文类型并进行处理:
会不会用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; }
相关文章推荐
- 解决UnicodeDecodeError: 'ascii' codec can't decode byte 0xe7 in position 12: ordinal not in range(128)的编码问题
- 2014ACM/ICPC亚洲区西安站 复旦命题
- 默/falling
- 利用poi生成excell文件
- spring mvc
- Python-Image 基本的图像处理操作
- 修改app名称
- 查看Linux服务器有没有无线网卡
- slf4j报错问题
- 手机APP测试类型与方法
- hdu5001 Walk 概率dp
- 优化原理之UITableView - 循环利用
- zookeeper节点数与watch的性能测试
- HTML5之Javascript多线程
- 【原】Github系列之三:开源iOS下 渐变颜色的进度条WGradientProgress
- Win7文件夹怎么加密
- 三角形 div重叠
- Linux 下网卡配置参数
- FMDB详解
- hdu 5228 OO’s Sequence 多校 思维题