通信协议解包过程(C/C++)

#include<stdio.h>
#include<string.h>
#include<malloc.h>
#include<yipulian.h>
#define MAX_DATA 1410  //1400+10




void Tostring(struct yipulian *ypl,char *buff,int String_len);
void main()
{
struct yipulian ypl;
char buff[]={0x7c,0x01,0x0b,0x5e,0x10,0x0a,0x0c,0x01,0x00,0x05,0x61,0x32,0x33,0x34,0x35};
int len;
int m;
// int n;
//int g;
short i=0;
short j=0;

len=(int)sizeof(buff);

  /*目的地址*/
i=i|buff[0];
i=i<<8; //左移8位2进制
j=j|buff[1];
ypl.addr_dest=i|j;
printf("addr_dest=%0x\n",ypl.addr_dest);


/*目的端口*/
ypl.port_dest=buff[2];
printf("port_dest=%0x\n",ypl.port_dest);


/*源地址    WRONG*/
i=0;j=0;
i=i|buff[3];
i=i<<8; //左移8位2进制
j=j|buff[4];
ypl.addr_source=i|j;
printf("addr_source=%0x\n",ypl.addr_source);


/*源端口*/
ypl.port_source=buff[5];
printf("port_source=%0x\n",ypl.port_source);


/*传输码*/
ypl.fram_trass_code=buff[6];
printf("fram_trass_code=%0x\n",ypl.fram_trass_code);


/*FC*/
ypl.FC=buff[7];
printf("FC=%0x\n",ypl.FC);


/*data_LENTH*/
i=0;j=0;
i=i|buff[8];
i=i<<8; //左移8位2进制
j=j|buff[9];
ypl.data_LENTH=(int)(i|j);
printf("data_LENTH=%d\n",ypl.data_LENTH);


/*数据域指针*/
ypl.string=malloc(ypl.data_LENTH);
for(m=0;m<ypl.data_LENTH;m++)
{
*(ypl.string+m)=buff[10+m];
printf("0x%0x\n",*(ypl.string+m));
 
}

printf("字符串长度 %d\n",len);

}


#ifndef __YIPULIAN__
#define  __YIPULIAN__


#define addr_dest_lenth 2 //所占字节数不代表内容代表字节长度
#define addr_sour_lenth 2
#define port_dest_lenth 1
#define port_sour_lenth 1
#define fram_trass_lenth 1
#define FC_lenth 1
#define data_lenth 2 //定义数据域内容长度,0000代表数据源为空
//#define CRC_lenth 2
#define MAX_DATA_LENTH 1400 //定义数据长度最大为1400字节 允许数据域为空


struct yipulian
{
 short addr_dest;
 char port_dest;
 short addr_source;
 char port_source;
 char fram_trass_code; //帧控制码及帧序号
 char FC; //功能码
 int data_LENTH; //数据长度   2byte
 char *string; //指向数据域的指针
};


#endif

评论 1 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

宁夏之夜

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值