QByteArray MainWindow::gemfieldCRC(QByteArray gemfield)
{
QByteArray temp;
unsigned short crc=0xffff;
unsigned short a,j,k;
for(a=0;a<gemfield.size();a++)
{
//crc和第a个字节里的值异或,新值赋给crc.
// 注意gemfield[a]在转换为int型时是有符号的,因此,我们在其值大于7F时,需要做相应的转换处理。你懂的。
crc =crc ^ ( (int)gemfield[a]>=0 ? gemfield[a] : (gemfield[a]+256) );
for(j=0;j<8;j++)
{
k=crc & 01;//看crc的最低位是不是0,如果不是0,就与0xA001异或。
crc=crc >> 1;
if (k==0) continue;
crc =crc ^ 0xA001;
}
}
temp[1] = crc/256;
temp[0] = crc%256;
return temp;//将整数转换为QByteArray返回。
}