关于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。