数据包格式:头部(4个字节)+数据长度(4个字节)+数据内容+ 尾部(4个字节)
使用C语言代码编写组包信息:
#include <stdio.h>
#include <string.h>
int main()
{
char szHead[]="Head";
char szBody[]="BoayData_Test";
char szTail[]= "Tail";
int nDataLen = -1;
//组合存储buf
char szbuf[1024]="";
//获取数据长度
nDataLen = strlen(szBody);
//合并头部
sprintf(szbuf,"%s",szHead);
//合并数据长度信息
memcpy(szbuf+strlen(szHead), &nDataLen,sizeof(nDataLen));
//合并数据
memcpy(szbuf+strlen(szHead)+sizeof(nDataLen), szBody,strlen(szBody));
//合并尾部
memcpy(szbuf+strlen(szHead)+sizeof(nDataLen)+nDataLen, szTail,strlen(szTail));
printf("Result: %s\r\n",szbuf);
return 0;
}
输出结果:
因使用printf输出的字符串遇到’\0’就默认为结束,所以需要使用内存查看器,查看数据才是正确的
数据长度值是0d转成10进制就是13 也就是szBody的长度
当然如果想要重新解析数据的话也是类似的方法:
//解析临时变量
char szTmp[1024]="";
//重新解析
memset(szTmp,0,sizeof(szTmp));
strncpy(szTmp,szbuf,4);
printf("Head:%s\r\n",szTmp);
memset(szTmp,0,sizeof(szTmp));
strncpy(szTmp,szbuf+4,4);
printf("Len:%d\r\n",szTmp[0]);
memset(szTmp,0,sizeof(szTmp));
strncpy(szTmp,szbuf+8,nDataLen);
printf("Body:%s\r\n",szTmp);
memset(szTmp,0,sizeof(szTmp));
strncpy(szTmp,szbuf+8+nDataLen,4);
printf("Tail:%s\r\n",szTmp);
此代码在输出了Result结果后添加的
输出结果: