下面这个程序是我在一本书上看到的,但我看不懂,和网上的一些CRC算法程序好像不同,希望各位高手能帮我看看,最好能写下注释,谢谢~
unsigned int Crc_ccitt_good(const char *sz,int len)
{
const int poly = 0x1021;
unsigned short xor_flag;
unsigned short good_crc = 0xffff; for(int len1=0 ;len1<len ;len1++)
{
unsigned short i,v;
v = 0x80; for(i = 0;i<8;i++)
{
if(good_crc & 0x8000)
xor_flag = 1;
else
xor_flag = 0; good_crc = good_crc << 1; if(*sz & v)
good_crc = good_crc + 1; if(xor_flag)
good_crc = good_crc ^ poly; v = v >> 1;
}
sz++;
}
for(int j = 0; j< 16 ; j++)
{
if(good_crc & 0x8000)
xor_flag = 1;
else
xor_flag = 0; good_crc = good_crc << 1 ; if(xor_flag)
good_crc = good_crc ^ poly;
}
return good_crc;
}
unsigned int Crc_ccitt_good(const char *sz,int len)
{
const int poly = 0x1021;
unsigned short xor_flag;
unsigned short good_crc = 0xffff; for(int len1=0 ;len1<len ;len1++)
{
unsigned short i,v;
v = 0x80; for(i = 0;i<8;i++)
{
if(good_crc & 0x8000)
xor_flag = 1;
else
xor_flag = 0; good_crc = good_crc << 1; if(*sz & v)
good_crc = good_crc + 1; if(xor_flag)
good_crc = good_crc ^ poly; v = v >> 1;
}
sz++;
}
for(int j = 0; j< 16 ; j++)
{
if(good_crc & 0x8000)
xor_flag = 1;
else
xor_flag = 0; good_crc = good_crc << 1 ; if(xor_flag)
good_crc = good_crc ^ poly;
}
return good_crc;
}
unsigned int Crc_ccitt_good(const char *sz,int len)
{
const int poly = 0x1021;
unsigned short xor_flag;
unsigned short good_crc = 0xffff; for(int len1=0 ;len1<len ;len1++) //数据总长度
{
unsigned short i,v;
v = 0x80; for(i = 0;i<8;i++) //处理完8位数据
{
if(good_crc & 0x8000) //判断CRC寄存器最高位是否为1
xor_flag = 1;
else
xor_flag = 0; good_crc = good_crc << 1; //CRC寄存器左移一位,
//把要处理的数据移入CRC寄存器
if(*sz & v) //判断要移入CRC寄存器的数据位是否为1
good_crc = good_crc + 1;//为1则CRC寄存器+1,为0则不加 if(xor_flag) //移出的数据为1,则CRC寄存器与多项式相异或
good_crc = good_crc ^ poly; v = v >> 1; //指向移入CRC寄存器的数据位
}
sz++; //处理下一个数据
}
for(int j = 0; j< 16 ; j++) //这下面的程序是干吗用的?按说上面那段程序得到的
{ //good_crc就是CRC校验和吧?不知我理解的对不?
if(good_crc & 0x8000)
xor_flag = 1;
else
xor_flag = 0; good_crc = good_crc << 1 ; if(xor_flag)
good_crc = good_crc ^ poly;
}
return good_crc;
}