代码
//CRC16计算函数
quint16 ModbusCRC16(QByteArray senddata)
{
int len=senddata.size();
quint16 wcrc=0xFFFF;//预置16位crc寄存器,初值全部为1
quint8 temp;//定义中间变量
int i=0,j=0;//定义计数
for(i=0;i<len;i++)//循环计算每个数据
{
temp=senddata.at(i);
wcrc^=temp;
for(j=0;j<8;j++){
//判断右移出的是不是1,如果是1则与多项式进行异或。
if(wcrc&0x0001){
wcrc>>=1;//先将数据右移一位
wcrc^=0xA001;//与上面的多项式进行异或
}
else//如果不是1,则直接移出
wcrc>>=1;//直接移出
}
}
temp=wcrc;//crc的值
return wcrc;
}
Qt中的无符号整型数据类型说明
typedef signed char qint8; /* 8 bit signed */
typedef unsigned char quint8; /* 8 bit unsigned */
typedef short qint16; /* 16 bit signed */
typedef unsigned short quint16; /* 16 bit unsigned */
typedef int qint32; /* 32 bit signed */
typedef unsigned int quint32; /* 32 bit unsigned */