C#串行通信(数据包的打包与解包)

C#串行通信(数据包的打包与解包)  

//单片机或者其他设备将要发送的数据进行打包处理

void pack_dat(unsigned char dat)

{

rf_buf[0]=10;//设定ID(协议头)

rf_buf[1]=chang_sig;//序列号(或者其他相关信息)

rf_buf[3]=rf_buf[0]^rf_buf[1];

rf_buf[2]=dat;//数据

rf_buf[3]^=rf_buf[3];//前三个数的异或(校验位)

}

//C#上位机程序接收函数

 private void serialPort1_DataReceived(object sender,    System.IO.Ports.SerialDataReceivedEventArgs e)

{

    Control.CheckForIllegalCrossThreadCalls = false;//防止出现所谓的“线程”错误

    int bytes = serialPort1.BytesToRead;//buffer中数据的长度

    byte[] buffer = new byte[bytes];//定义一个长度为bytes的字节数组

    serialPort1.Read(buffer, 0, bytes);      //读取buffer中的数据  

    for (i = 0; i < bytes; i++)

    {

       Dispose(buffer[i]);

    }

}

//将接收到的数据进行处理,提取协议头

private void Dispose_Battery(int n)

{

    Init_Arry[3] = Init_Arry[2];

    Init_Arry[2] = Init_Arry[1];

    Init_Arry[1] = Init_Arry[0];

    Init_Arry[0] = n;

    if(Init_Arry[3] ==10)//协议头 ID

     {

        unpack_dat();

     }

 ……

//解包过程

void unpack_dat()

{

      if(rf_buf[3]==(rf_buf[0]^rf_buf[1]^rf_buf[2]))

  {

//相关处理函数

  }

}

     tuzhuke

2010-12-12

http://duanfei12340.blog.163.com/blog/static/12039714320101112101236372/

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值