#include "mainwindow.h"
#include <QApplication>
#include <QDebug>
#define POLY 0x1021 //生成多项式
//如果是发送数据时调用,是为了得到余数
//如果是接收数据时调用,是为了校验,如果结果为0,则正确,否则不正确
uint Crc(unsigned char *addr, int len)
{
uint crc = 0;
for(int i=0; i<len; i++)
{
crc ^= addr[i];
for(int j=0; j<8; j++)
{
if(crc & 1)
crc = (crc >> 1) ^ POLY;
else
crc >>= 1;
}
}
return crc;
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
unsigned char data[13];
for(int i=0; i<9; i++) //存放数据
data[i] = i + '0';
uint crc = Crc(data, 9); //得到余数,余数为4个字节
uchar *p = (uchar *)&crc;
data[9] = p[0]; //存放余数
data[10] = p[1];
data[11] = p[2];
data[12] = p[3];
if(Crc(data, 13) == 0) //校验
{
qDebug() << "right";
}
else
{
qDebug() << "wrong";
}
return 0;
return a.exec();
}
运行结果:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
uint n = 0x11;
uchar data[8];
uchar *p = (uchar *)&n;
for(int i=0; i<4; i++) //存放数据
data[i] = p[i];
uint crc = Crc(data, 4); //得到余数,余数为4个字节
uchar *p1 = (uchar *)&crc;
data[4] = p1[0]; //存放余数
data[5] = p1[1];
data[6] = p1[2];
data[7] = p1[3];
if(Crc(data, 8) == 0) //校验
{
qDebug() << "right";
}
else
{
qDebug() << "wrong";
}
return 0;
return a.exec();
}
运行结果: