异或校验算法的应用

异或交验算法

通过本段程序将通过异或校验算法,对给定的字符串进行获取交验值,并根据一般的数据打包方法把数据加上包头、包尾、交验值和回车换行符,成为数据发送包。

  1. /*--------------------------------------------------------------------------------------
  2. *程序功能:将字符串按照NMEA-0183无线通信协议格式打包函数
  3. *执行条件:通过函数调用
  4. *执行结果:将给定的字符串参数经过异或校验后打包发送
  5. *--------------------------------------------------------------------------------------*/
  6. voidCSerialPortTestDlg::SendNMEAData(CString&strData)
  7. {
  8. charchecksum=0,cr=13,ln=10;
  9. charch,cl;//校验位的高四位和第四位;
  10. //例如:校验值为5D,则ch='5';cl='D';
  11. for(inti=0;i<strData.GetLength();i++)
  12. {
  13. checksum=checksum^strData[i];//进行异或交验取值
  14. }
  15. /*--------------------------------------------------------------------------------------
  16. *功能:(下列代码)为了取得的异或值能够显示为字符
  17. *过程:先将异或后的一个字节,高四位和第四位分开,根据
  18. *对应的16进制数,显示出其字符。例如0000,对应16进制的0,
  19. *将会显示字符‘0’,即ASCII的第30个字符,1011对应16进制的B
  20. *将会显示字符‘B’,即ASCII的第65个字符(‘A’后面那个,所
  21. *以计算方法是‘A’+1)
  22. *--------------------------------------------------------------------------------------*/
  23. ch=(checksum>>4)&0x0F;//取高位数;
  24. cl=checksum&0x0F;//取低位数;
  25. if(ch<10));//低于10的数
  26. ch=ch+'0';
  27. else
  28. ch=(ch-10)+'A';);//不低于10的16进制数,如:A、B、C、D、E、F
  29. if(cl<10)
  30. cl=cl+'0';
  31. else
  32. cl=(cl-10)+'A';
  33. CStringstrNMEAData;
  34. //加上包头、包尾、校验值和回车、换行符,形成数据包
  35. strNMEAData='$'+strData+'*'+ch+cl+cr+ln;
  36. m_SerialPort.WriteToPort((LPCTSTR)strNMEAData);//将数据包发送
  37. m_strEditSendMessage.Format("发送数据包:%s",strNMEAData);//显示数据包
  38. UpdateData(FALSE);
  39. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值