请教crc16校验方式的原理?

hustwjz 2001-09-20 09:11:24
听说crc16是一种标准校验方式,我也得到了一个crc16校验的函数
unsigned int CRC_16(unsigned int c,unsigned char d)
调用时:
unsigned char crcbuff[] = {31,3,0,1,0,7};
unsigned char a;
unsigned int crc16 = 0xffff;
for(a=0;a<6;a++)
{
crc16 = CRC_16(crc16,crcbuff[a]);
}
请问:
1。crc16是不是对无论多长的字符串都可以进行校验,然后将校验结果保存在一个变量当中?
2。接收到数据后是不是用本函数将接收到的字符串用这种方式找到校验码,然后与得到的校验码比较,就可以判断数据是否失真?
...全文
311 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
hustwjz 2001-10-09
  • 打赏
  • 举报
回复
谢谢大家的关注,我已经找到了crc16校验的源程序,校验的标准值因人而异
#pragma small
#include <reg52.h>
unsigned int CRC_16(unsigned int c,unsigned char d);
void main(void)
{ unsigned char crcbuff[] = {31,3,0,1,0,7};
unsigned char a;
unsigned int crc16 = 0xffff;
for(a=0;a<6;a++)
{
crc16 = CRC_16(crc16,crcbuff[a]);
}
}
unsigned int CRC_16(unsigned int c,unsigned char d)
{
unsigned int e;
unsigned char f;
e = c^(unsigned int)d;
for(f=0;f<8;f++)
{
if(e&1)
{
e >>= 1;
e ^= 0xa001;
}
else e >>= 1;
}
return e;
}
klhu 2001-10-01
  • 打赏
  • 举报
回复
我以前在一个洋人的网站上找到一篇文章介绍crc,(3-5年前)现在找不到了,可能是buokely之类的。希望大家翻一翻,找到了贴出来,让大家长一长见识
GrayWhite 2001-09-24
  • 打赏
  • 举报
回复
1,是的
2,一般和一个常量比较,0或其他值,因标准而异
wilddragon 2001-09-24
  • 打赏
  • 举报
回复
期待答案
wilddragon 2001-09-24
  • 打赏
  • 举报
回复
天生我才必有用
wilddragon 2001-09-21
  • 打赏
  • 举报
回复
gz
yinx 2001-09-20
  • 打赏
  • 举报
回复
关注

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧