Foxtable(狐表)用户栏目专家坐堂 → [求助]求CRC16 校验码算法例子


  共有9002人关注过本帖平板打印复制链接

主题:[求助]求CRC16 校验码算法例子

帅哥哟,离线,有人找我吗?
111yangguojun
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:243 积分:1928 威望:0 精华:0 注册:2013/8/8 23:49:00
  发帖心情 Post By:2014/12/24 19:01:00 [只看该作者]

#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的算法,这个经过测试,结果是正确的!


 回到顶部
总数 15 1 2 下一页