computer networks b-k8凯发旗舰
|
|
|
教学公告
crc(cyclical redundancy check) 循环冗余校验,在《计算机组成原理》里面有这个知识点。类似的校验有奇偶校验、校验和校验。
可以简单的理解成在发送数据后面加上这个验证码,判断前面数据是否正确。
接收方如何检查收到的信息有无错误(一个简单通俗的模型) 首先接收方和发送方约定一个“生成多项式”g(x);
生成多项式的选取是个很有难度的问题,如果选的不好,那么检出错误的概率就会低很多。好在这个问题已经被专家们研究了很长一段时间了,对于我们这些使用者来说,只要把现成的成果拿来用就行了。在本次课程上,我们写一个简单的程序来生成crc码,然后做验证。
模板:
#include
#include
#include
#include
typedef unsigned charuchar;
typedef unsigned shortushort;
typedef unsigned intuint;
/************************************************************************/
/* 产生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;
}