异或校验算法的应用
2018-01-26 10:52
260 查看
异或交验算法
通过本段程序将通过异或校验算法,对给定的字符串进行获取交验值,并根据一般的数据打包方法把数据加上包头、包尾、交验值和回车换行符,成为数据发送包。
/*--------------------------------------------------------------------------------------
* 程序功能:将字符串按照NMEA-0183无线通信协议格式打包函数
* 执行条件:通过函数调用
* 执行结果:将给定的字符串参数经过异或校验后打包发送
*--------------------------------------------------------------------------------------*/
void CSerialPortTestDlg::SendNMEAData(CString &strData)
{
char checksum = 0, cr = 13, ln = 10;
char ch,cl;//校验位的高四位和第四位;
//例如:校验值为5D,则ch='5';cl='D';
for (int i = 0; i<strData.GetLength(); i++)
{
checksum = checksum ^ strData[i]; //进行异或交验取值
}
/*--------------------------------------------------------------------------------------
* 功能:(下列代码)为了取得的异或值能够显示为字符
* 过程:先将异或后的一个字节,高四位和第四位分开,根据
* 对应的16进制数,显示出其字符。例如0000,对应16进制的0,
* 将会显示字符‘0’,即ASCII的第30个字符,1011对应16进制的B
* 将会显示字符‘B’,即ASCII 的第65个字符(‘A’后面那个,所
* 以计算方法是‘A’+1)
*--------------------------------------------------------------------------------------*/
ch = (checksum >> 4) & 0x0F; //取高位数;
cl = checksum & 0x0F; //取低位数;
if (ch < 10));//低于10的数
ch = ch + '0';
else
ch = (ch - 10 ) + 'A';);//不低于10的16进制数,如:A、B、C、D、E、F
if (cl < 10)
cl = cl + '0';
else
cl = (cl - 10 )+ 'A';
CString strNMEAData;
//加上包头、包尾、校验值和回车、换行符,形成数据包
strNMEAData = '$' + strData + '*' + ch + cl + cr + ln;
m_SerialPort.WriteToPort((LPCTSTR)strNMEAData);//将数据包发送
m_strEditSendMessage.Format("发送数据包:%s",strNMEAData);//显示数据包
UpdateData(FALSE);
}
通过本段程序将通过异或校验算法,对给定的字符串进行获取交验值,并根据一般的数据打包方法把数据加上包头、包尾、交验值和回车换行符,成为数据发送包。
/*--------------------------------------------------------------------------------------
* 程序功能:将字符串按照NMEA-0183无线通信协议格式打包函数
* 执行条件:通过函数调用
* 执行结果:将给定的字符串参数经过异或校验后打包发送
*--------------------------------------------------------------------------------------*/
void CSerialPortTestDlg::SendNMEAData(CString &strData)
{
char checksum = 0, cr = 13, ln = 10;
char ch,cl;//校验位的高四位和第四位;
//例如:校验值为5D,则ch='5';cl='D';
for (int i = 0; i<strData.GetLength(); i++)
{
checksum = checksum ^ strData[i]; //进行异或交验取值
}
/*--------------------------------------------------------------------------------------
* 功能:(下列代码)为了取得的异或值能够显示为字符
* 过程:先将异或后的一个字节,高四位和第四位分开,根据
* 对应的16进制数,显示出其字符。例如0000,对应16进制的0,
* 将会显示字符‘0’,即ASCII的第30个字符,1011对应16进制的B
* 将会显示字符‘B’,即ASCII 的第65个字符(‘A’后面那个,所
* 以计算方法是‘A’+1)
*--------------------------------------------------------------------------------------*/
ch = (checksum >> 4) & 0x0F; //取高位数;
cl = checksum & 0x0F; //取低位数;
if (ch < 10));//低于10的数
ch = ch + '0';
else
ch = (ch - 10 ) + 'A';);//不低于10的16进制数,如:A、B、C、D、E、F
if (cl < 10)
cl = cl + '0';
else
cl = (cl - 10 )+ 'A';
CString strNMEAData;
//加上包头、包尾、校验值和回车、换行符,形成数据包
strNMEAData = '$' + strData + '*' + ch + cl + cr + ln;
m_SerialPort.WriteToPort((LPCTSTR)strNMEAData);//将数据包发送
m_strEditSendMessage.Format("发送数据包:%s",strNMEAData);//显示数据包
UpdateData(FALSE);
}
相关文章推荐
- 异或校验算法的应用
- (转)一种高速内存校验算法(Delphi MMX优化算法应用之一)
- 异或在算法中的应用
- 一种高速内存校验算法(Delphi MMX优化算法应用之一)
- 算法—位异或的应用
- 有趣算法--“异或” 原理及应用
- 异或运算在算法编程题中的应用
- 算法设计与应用基础系列13
- Adaboost原理、算法以及应用
- PHP实现的简单排列组合算法应用示例
- 算法应用-素数
- 密码学算法及应用(一)
- 【机器学习】k-近邻算法简介与应用
- 异或校验工作方式
- Silverlight.XNA(C#)跨平台3D游戏研发手记:(二)四叉树遍历与人工智能A*算法在SLG移动路径范围测算中的应用
- 同余定理在算法求解中的应用
- 机器学习经典算法12-SVD及其在推荐中的应用
- 高频交易算法研发心得--MACD指标算法及应用
- [算法设计与分析]3.4.4斐波那契数列的应用(上楼梯)