关于CRC16校验函数有关问题
关于CRC16校验函数问题
以下是网上抄来的:
unsigned int calccrc(uchar crcbuf,uint crc)
{
uchar i;
crc=crc ^ crcbuf;
for(i=0;i<8;i++)
{
uchar chk;
chk=crc&1;
crc=crc>>1;
crc=crc&0x7fff;
if (chk==1)
crc=crc^0xa001;
crc=crc&0xffff;
}
return crc;
}
unsigned int chkcrc(uchar *buf,uchar len) //这里的len变量应该是无符号整型的吧?
{
uchar hi,lo;
uint i;
uint crc;
crc=0xFFFF;
for (i=0;i<len;i++)
{
crc=calccrc(*buf,crc);
buf++;
}
hi=crc%256;
lo=crc/256;
crc=(hi<<8)|lo;
return crc;
}
//我把 uint函数改成下面的怎么样?
unsigned int calccrc(uchar crcbuf,uint crc)
{
uchar i;
crc=crc ^ crcbuf;
for(i=0;i<8;i++)
{
uchar chk;
chk=crc&1;
crc=crc>>1;
crc=crc&0x7fff;
if (chk==1)
crc=crc^0xa001;
crc=crc&0xffff;
}
return crc;
}
unsigned int chkcrc(uchar buf[uint i])
{
uchar hi,lo;
uint crc;
crc=0xFFFF;
for (i=0;i<len;i++)
{
crc=calccrc(crcbuf[i],crc);
}
hi=crc%256;
lo=crc/256;
crc=(hi<<8)|lo;
return crc;
}
谢谢大家多给意见!
------解决方案--------------------
把uchar i改为uint i。
以下是网上抄来的:
unsigned int calccrc(uchar crcbuf,uint crc)
{
uchar i;
crc=crc ^ crcbuf;
for(i=0;i<8;i++)
{
uchar chk;
chk=crc&1;
crc=crc>>1;
crc=crc&0x7fff;
if (chk==1)
crc=crc^0xa001;
crc=crc&0xffff;
}
return crc;
}
unsigned int chkcrc(uchar *buf,uchar len) //这里的len变量应该是无符号整型的吧?
{
uchar hi,lo;
uint i;
uint crc;
crc=0xFFFF;
for (i=0;i<len;i++)
{
crc=calccrc(*buf,crc);
buf++;
}
hi=crc%256;
lo=crc/256;
crc=(hi<<8)|lo;
return crc;
}
//我把 uint函数改成下面的怎么样?
unsigned int calccrc(uchar crcbuf,uint crc)
{
uchar i;
crc=crc ^ crcbuf;
for(i=0;i<8;i++)
{
uchar chk;
chk=crc&1;
crc=crc>>1;
crc=crc&0x7fff;
if (chk==1)
crc=crc^0xa001;
crc=crc&0xffff;
}
return crc;
}
unsigned int chkcrc(uchar buf[uint i])
{
uchar hi,lo;
uint crc;
crc=0xFFFF;
for (i=0;i<len;i++)
{
crc=calccrc(crcbuf[i],crc);
}
hi=crc%256;
lo=crc/256;
crc=(hi<<8)|lo;
return crc;
}
谢谢大家多给意见!
------解决方案--------------------
把uchar i改为uint i。