|
|
教学公告
CRC(cyclical redundancy check) 循环冗余校验,在《计算机组成原理》里面有这个知识点。类似的校验有奇偶校验、校验和校验。
可以简单的理解成在发送数据后面加上这个验证码,判断前面数据是否正确。
接收方如何检查收到的信息有无错误(一个简单通俗的模型) 首先接收方和发送方约定一个“生成多项式”g(x);
生成多项式的选取是个很有难度的问题,如果选的不好,那么检出错误的概率就会低很多。好在这个问题已经被专家们研究了很长一段时间了,对于我们这些使用者来说,只要把现成的成果拿来用就行了。在本次课程上,我们写一个简单的程序来生成CRC码,然后做验证。
模板:
#include
#include
#include
#include
typedef unsigned char uchar;
typedef unsigned short ushort;
typedef unsigned int uint;
/************************************************************************/
/* 产生CRC16多项式(0x1021)的校验码(只能处理单个字节)
/************************************************************************/
void crc16_one_byte(const uchar data, ushort &crc)
{
}
/************************************************************************/
/* 产生CRC32多项式(0x04C11DB7)的校验码(只能处理单个字节)
/************************************************************************/
void crc32_one_byte(const uchar data, uint &crc )
{
}
/************************************************************************/
/* 产生CRC16多项式(0x1021)的校验码(能处理多个字节)
/* CRC32类似
/************************************************************************/
void crc16_multi_byte(const uchar data, ushort &crc)
{
}
/************************************************************************/
/* 得到发送的数据
/* 对应于CRC16校验,CRC32类似
/************************************************************************/
void getSendData(const uchar data, char *sendData, ushort &crc16)
{
}
/************************************************************************/
/* 验证接收到的数据
/* 对应于CRC16校验,CRC32类似
/************************************************************************/
void checkout_data(char *sendData)
{
}
int main( void )
{
char sendData[10] = {0};
uchar data = 'a';
ushort crc16 = 0;
//得到CRC16的校验码
crc16_one_byte(data, 8, crc16);
//拼接得到需要发送的数据
getSendData(data, sendData, crc16);
//验证数据
checkout_data(sendData);
return 0;
}