C51编程:CRC编程求助我在看一个CRC-16的校验和生成程序,感觉有的地方不大理解。
代码如下:
buf 为字节序列, len: 序列长度
返回该序列的CRC_16校验码
多项式: x^16+x^15+x^2+1
unsigned int CRC_16(unsigned char *buf,unsigned int len)
{
unsigned short crc=0;
unsigned short c,i;
while(len!=0)
{
c=*buf;
c<<=8;
for(i=0;i<8;i++)
{
if((crc^c)&0x8000) crc=(crc<<1)^0x8005;
else crc<<=1;
c<<=1;
}
len--;
buf++;
}
return crc;
}
我认为该程序的意思是用buf指向每一个8bit的数据字节,len是数据字节数,
对每一个数据字节求一个16bit的CRC值。
不明白的地方:生成多项式: x^16+x^15+x^2+1是针对8bit的数据求一个16bit的CRC值。
该程序为什么是对有len个字节的数据求CRC值。
另外,如程序中对每一个字节都求一个CRC值并存放在变量crc中,那么后面
的crc显然会覆盖前面的crc,最后求出的crc是什么意义的crc?
不解啊,盼各位前辈指点迷津!