CRC求助 点击:716 | 回复:2



fishingcat

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 10回
  • 年度积分:0
  • 历史总积分:75
  • 注册:2003年9月30日
发表于:2003-11-03 14:25:00
楼主
CRC 产生过程中,每个8 位字符都单独和寄存器内容相或OR ,结果向最低有效位方向移动,最高有效位以0 填充。LSB 被提取出来检测,如果LSB 为1 ,寄存器单独和预置的值或一下;如果LSB 为0 ,则不进行。整个过程要重复8 次,在最后一位第8 位完成后,下一个8 位字节又单独和寄存器的当前值相或,最终寄存器中的值是消息中所有的字节都执行之后的CRC 值 我看了还是不懂,请各位大大帮我讲解讲解。 多谢!!!!!



GaryLin

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 1186回
  • 年度积分:0
  • 历史总积分:1263
  • 注册:2003年4月15日
发表于:2003-11-03 14:10:00
1楼
http://www.gongkong.com/tech/detail.asp?id=154132

yhsu

  • 精华:1帖
  • 求助:0帖
  • 帖子:5帖 | 98回
  • 年度积分:0
  • 历史总积分:126
  • 注册:2002年7月04日
发表于:2003-11-03 14:25:00
2楼
void CRC_check(unsigned char *buff, int len, unsigned char *chk) { unsigned short crc; unsigned char *cptr; int i; crc=0xFFFF; for(i=0; i <len; i++) { CRC_calc(buff[i] , &crc); } cptr=(unsigned char *)&crc; chk[0]=*(cptr); // Low Byte first chk[1]=*(cptr+1); // High byte return; } /*...........................................................................*/ /* CRC one byte calculation */ /*...........................................................................*/ void CRC_calc(unsigned char c, unsigned short *crc) { unsigned char bn; unsigned short i; for(i = 8 ; i > 0 ; i--) { bn = c; c /=(unsigned char) 2; if((*crc & 0x0001)){ bn++; } *crc /=(unsigned short) 2; if((bn & 0x0001)){ *crc ^= 0xa001; } } return; }

热门招聘
相关主题

官方公众号

智造工程师