/**********************************************************
函数名称: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;//低位
}
C++ Qt 两字节相加(和)的校验位
最新推荐文章于 2024-06-20 10:00:00 发布