可变长结构体.docx

可变长结构体.docx

ID:59219789

大小:11.38 KB

页数:2页

时间:2020-09-09

可变长结构体.docx_第1页
可变长结构体.docx_第2页
资源描述:

《可变长结构体.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、可变长结构体变长结构体的核心思想就是在结构体的最后一个数据结构为一个指针,这个指针指向的是这个结构体的末尾数据,说的有点绕,见下面结构体typedefstructstru_tcp_server_msg{uint32_msgLength;//消息体长度此长度为整个消息长度,包括msgLength本身的长度uint32_returnCode;//消息TcpServer返回码uint8_zmqMsgBody[0];//消息体}TS_TCP_SERVER_MSG; 见上面zmqMsgBody[0]的定义

2、,看起来很奇怪,其实它的作用就是指向这个结构体的末尾,他怎么使用呢?typedefstructstru_zmq_server_msg{  uint32_deviceId;  uint32_msgCode;}TS_ZMQ_SERVER_MSG;intlen=sizeof(TS_TCP_SERVER_MSG)+sizeof(TS_ZMQ_SERVER_MSG);TS_TCP_SERVER_MSG*tdata=(TS_TCP_SERVER_MSG*)malloc(len);tdata->msgLeng

3、th=len;tdata->returnCode=0;TS_ZMQ_SERVER_MSG*data=(TS_ZMQ_SERVER_MSG*)tdata->zmqMsgBody;data->deviceId=100;data->msgCode=TS_DEVICE_CONFIG_REQ_MSG;就是这样,malloc一个sizeof(TS_TCP_SERVER_MSG)+ sizeof(TS_ZMQ_SERVER_MSG)长度的数据块就可以了,如上代码tdata->zmqMsgBody所指向的就是T

4、S_TCP_SERVER_MSG结构体的尾位置,也就是TS_ZMQ_SERVER_MSG的首位置。还有一个为题就是,有时zmqMsgBody[0]这种定义有的编译器编译不过去,解决办法很简单改成zmqMsgBody[1]即可。但注意sizeof的大小会改变zmqMsgBody[0]时,这个项目是不算到结构体长度里面的,但是zmqMsgBody[1]会把这个项目的长度加到结构体长度,然后字节补齐(1字节对齐时不需要补齐),例如TS_TCP_SERVER_MSG结构体[0]时:sizeof(TS_T

5、CP_SERVER_MSG)=8[1]时:sizeof(TS_TCP_SERVER_MSG)=8+1+3=12  //3为字节补齐

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。