/**********************************************************
函数名称:checkSum
函数功能:校验位 帧头+数据段按2字节累加和(若数据段个数为奇数,则累加和时在数据段后方补1个字节0x00)
函数参数:QByteArray 帧头+数据段的数据 highBit-校验位的高位 lowBit-校验位的低位 cmdHeaderStr-校验位前面的数据
函数返回值:QByteArray 校验位
**********************************************************/
void tcpRecvData::checkSum(const QVector<unsigned char> &cmdHeaderStr,unsigned char &highBit,unsigned char &lowBit)
{
short sum = 0;
int sumDataLen = 0;
unsigned char buwei = 0x00;
sumDataLen = cmdHeaderStr.length();
QVector<short> sumVec;
for(int i = 0; i < sumDataLen; i += 2)
{
//获取两个字节
sum = cmdHeaderStr[i] << 8 ;
if(i + 1 < sumDataLen)
{
sum += (unsigned char)cmdHeaderStr[i + 1];
}
else
{
sum += (unsigned char)buwei;
}
sumVec.push_back(sum);
}
short checkSum = std::accumulate(sumVec.begin(),sumVec.end(),0);
highBit = checkSum >> 8;//高位
lowBit = checkSum & 0xFF;//低位
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)