from:http://yoyo.play175.com/p/200.html

节选至百度百科:

首先,任何一个由二进制数位串组成的代码,都可以惟一地与一个只含有0和1两个系数的多项式建立一一对应的关系。例如,代码1010111对应的多项式为X^6+X^4+X^2+X+1(这里的X^n表示x的n次方)。同样.多项式X^5+X^3+X^2+X+1对应的代码为101111。CRC码在发送端编码和接收端校验时,都可以利用事先约定的生成多项式G(X)来得到。目前广泛使用的生成多项式主要有以下四种:
CRC12=X^12+X^11+X^3+X^2+1
CRC16=X^16+X^15+X^2+1(IBM公司)
CRC16=X^16+X^12+X^5+1(国际电报电话咨询委员会CCITT)
CRC32=X^32+X^26+X^23+X^22+X^16+X^11+X^10+X^8+X^7+X^5+X^4+X^2+X+1
冗余码的计算方法是,先将信息码后面补0,补0的个数是生成多项式最高次幂;将补零之后的信息码用模二除法(非二进制除法)除以G(X)对应的2进制码,注意除法过程中所用的减法是模2减法,即没有借位的减法,也就是异或运算。当被除数逐位除完时,得到比除数少一位的余数。此余数即为冗余位,将其添加在信息位后便构成CRC码字。
例如,假设信息码字为11100011,生成多项式G(X)=X^5+X^4+X+1,计算CRC码字。
G(X) = X^5+X^4+X+1,也就是110011,因为最高次是5,所以,在信息码字后补5个0,变为1110001100000。用1110001100000模二除法除以110011,余数为11010,即为所求的冗余位。
因此发送出去的CRC码字为原始码字11100011末尾加上冗余位11010,即 1110001111010。接收端收到码字后,采用同样的方法验证,即将收到的码字用模二除法除以110011(是G(X)对应的二进制生成码),发现余数是0,则认为码字在传输过程中没有出错。

附获得CRC32的C代码:

  1. unsigned long getCRC32( unsigned char* pBuf,unsigned long len)
  2. {
  3. static unsigned long crcTable[256];
  4. static unsigned char isInit;
  5. unsigned long poly;
  6. int i, j;
  7. register unsigned long crc;
  8. if(isInit==0)
  9. {
  10. isInit = 1;
  11. poly = 0xEDB88320L;
  12. for (i=0; i<256; i++) {
  13. crc = i;
  14. for (j=8; j>0; j--) {
  15. if (crc&1) {
  16. crc = (crc >> 1) ^ poly;
  17. } else {
  18. crc >>= 1;
  19. }
  20. }
  21. crcTable[i] = crc;
  22. }
  23. }
  24. int c;
  25. crc = 0xFFFFFFFF;
  26. i=0;
  27. while(len--) {
  28. c = pBuf[i];
  29. i++;
  30. crc = ((crc>>8) & 0x00FFFFFF) ^ crcTable[ (crc^c) & 0xFF ];
  31. }
  32. return( crc^0xFFFFFFFF );
  33. }

CRC冗余校验码的介绍和实现相关推荐

  1. CRC冗余校验码及查表法

    CRC冗余校验码及查表法 什么是CRC编码 它将一个长度为k的位串看作是系数是0或者1的k-1次多项式 使用一个长度为r+1的生成多项式进行模2计算,生成一个长度为r的字符序列,能检测长度小于等于r的 ...

  2. CRC冗余校验码源码代码c语言,循环冗余校验码(CRC)应用总结(包括C++源码)

    最近在实习期间需要用到数据的校验,所选为CRC16,那么就在此总结一番吧. 现在此说明下什么是CRC:循环冗余码校验 英文名称为Cyclical Redundancy Check,简称CRC,它是利用 ...

  3. 校验码(海明校验,CRC冗余校验,奇偶校验)

    循环冗余校验码 CRC码利用生成多项式为k个数据位产生r个校验位进行编码,其编码长度为n=k+r所以又称 (n,k)码. CRC码广泛应用于数据通信领域和磁介质存储系统中. CRC理论非常复杂,一般书 ...

  4. java 奇偶校验_校验码(海明校验,CRC冗余校验,奇偶校验)

    循环冗余校验码 CRC码利用生成多项式为k个数据位产生r个校验位进行编码,其编码长度为n=k+r所以又称 (n,k)码. CRC码广泛应用于数据通信领域和磁介质存储系统中. CRC理论非常复杂,一般书 ...

  5. java生成冗余校验码_对循环冗余校验码CRC的理解

    模2加法 1+1=0, 0+1=1, 1+0=1, 0+0=0 模2减法 1-1=0, 0-1=1, 1-0=1, 0-0=0 相当于二进制中的逻辑异或运算.也就是比较后两者对应位相同则结果为&quo ...

  6. CRC冗余校验举例和原理

    什么是CRC校验? CRC即循环冗余校验码:是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定.循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并 ...

  7. 计算机网络之数据链路层:3、差错控制(奇偶校验、CRC冗余校验、海明校验)

    差错控制 思维导图: 什么是差错: 位错: 位错之检错编码:奇偶校验码 位错之检错编码:循环冗余码 位错之纠错编码:海明校验码 思维导图: 什么是差错: 产生差错的原因主要是噪声:噪声分为全局性噪声和 ...

  8. C++实现CRC冗余校验中FCS检测序列的生成

    循环冗余检测(Cyelie Redundancy Check) CRC编码也称为多项式编码. CRC编码操作如下.考虑d比特的数据D,发送节点要将它发送给接收节点.发送方和接收方必须首先协商一个r+1 ...

  9. CRC 冗余校验计算

    (1)设G(x)为r阶,则在信息位末尾加r个0形成新信息 r=原信息位数 - 1 转载于:https://www.cnblogs.com/RzCong/p/6246574.html

最新文章

  1. 程序员过关斩将--面试官再问你Http请求过程,怼回去!
  2. 特殊字符的正则表达式
  3. 智能指针shared_ptr的用法
  4. html标签体,HTMLCSS基础-html标签的实体
  5. kafka查看topic数据消费情况
  6. JS数组去重方法小结
  7. 基于FFMPEG 的跨平台视频编解码研究
  8. webpack 图片的路径与打包
  9. 北京出台快递业价格行为规则 不得收取未予标明的费用
  10. Python中使用xpath结合contains
  11. 劳荣枝潜逃 23 年落网,多亏了它!
  12. PHP计算字符串的个数
  13. python可以用来写导航吗_在python中使用selenium进行导航
  14. 创建你的第一个游戏Pong——概览
  15. idea开发springboot的一些小干货
  16. 华为 21 级程序员月薪曝光:270k 封神!众网友直呼长见识
  17. Hive实现数据文件导入与分析
  18. 《世界因你不同》——大学生活:贫穷而快乐的日子
  19. Laravel 中使用 Laravel-Excel 美化
  20. ESP-BOX LVGL ask_wdt: Task watchdog got triggered问题 物联网

热门文章

  1. 惠普企业警告:Sudo 漏洞可使攻击者获得 Aruba 平台的 root 权限
  2. 你必须知道的 SmartSql !
  3. vue的table组件
  4. Oracle变量的定义、赋值及使用
  5. JS编辑器获取选择内容的HTML多浏览器兼容性写法(支持Chorme、Firefox)
  6. 磁盘空间使用关乎SQL Server性能
  7. PHP100个知识点之2 日期时间(一)
  8. android数字提示错误,从服务器接收数据时出现Android错误
  9. 蓝桥杯 ALGO-77 算法训练 斜率计算
  10. 蓝桥杯 ADV-197 算法提高 P1001