推广 热搜:
 |  行业设备  |  机械制造  |  机器视觉  |  机械自动化  |  仪器仪表  |  工业机器人  |  编程开发  |  嵌入式  |  电子技术  |  工控自动化  |  电工电气 频道

异或校验算法的应用

   日期:2018-04-16     浏览:135    评论:0    
核心提示:通过本段程序将通过异或校验算法,对给定的字符串进行获取交验值,并根据一般的数据打包方法把数据加上包头、包尾、交验值和回车
  通过本段程序将通过异或校验算法,对给定的字符串进行获取交验值,并根据一般的数据打包方法把数据加上包头、包尾、交验值和回车换行符,成为数据发送包。

 

  1. void CSerialPortTestDlg::SendNMEAData(CString &strData)
  2. {
  3.     char checksum = 0, cr = 13, ln = 10;
  4.     char ch,cl;//校验位的高四位和第四位; 
  5.                //例如:校验值为5D,则ch='5';cl='D'; 
  6.  
  7.     for (int i = 0;  i<strData.GetLength();  i++)
  8.     {
  9.         checksum = checksum ^ strData[i]; //进行异或交验取值 
  10.     }
  11.  
  12.   
  13.     ch = (checksum  >> 4) & 0x0F;  //取高位数;
  14.     cl = checksum & 0x0F;  //取低位数;
  15.  
  16.     if (ch < 10));//低于10的数
  17.         ch = ch  +  '0';
  18.     else
  19.         ch = (ch - 10 ) +  'A';);//不低于10的16进制数,如:A、B、C、D、E、F
  20.  
  21.     if (cl < 10)
  22.         cl = cl  +  '0';
  23.     else
  24.         cl = (cl - 10 )+  'A';
  25.  
  26.     CString strNMEAData;
  27.     //加上包头、包尾、校验值和回车、换行符,形成数据包 
  28.     strNMEAData = '$' + strData + '*' + ch + cl + cr + ln;
  29.  
  30.     m_SerialPort.WriteToPort((LPCTSTR)strNMEAData);//将数据包发送 
  31.     m_strEditSendMessage.Format("发送数据包:%s",strNMEAData);//显示数据包
  32.     UpdateData(FALSE);
  33. }
  34.  
  35.  
 
打赏
 
更多>同类 嵌入式
0相关评论

推荐图文
推荐 嵌入式
点击排行

网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报