#include<stdio.h>
unsigned int calccrc(unsigned char crcbuf,unsigned int crc)
{
unsigned char i;
crc=crc ^ crcbuf;
for(i=0;i<8;i++)
{
unsigned char chk;
chk=crc&1;
crc=crc>>1;
crc=crc&0x7fff;
if (chk==1)
crc=crc^0xa001;
crc=crc&0xffff;
}
return crc;
}
unsigned int chkcrc(unsigned char *buf,unsigned char len)
{
unsigned char hi,lo;
unsigned int i;
unsigned int 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;
}
void main()
{
//char buf[8]={0x01,0x03,0x00,0x00,0x00,0x02};
char buf[8]={0x01,0x04,0x00,0x00,0x00,0x0a};
int modbus,i;
//memset(buf,0,sizeof(buf));
//for(i=0;i<8;i++)
{
// buf[i]=40+i;
}
modbus = chkcrc(buf,sizeof(buf)-2);
printf("----modbus=%x\n",modbus);
}
这个是 VC的算法,这个经过测试,结果是正确的!