循环冗余检验 (crc) 算法原理及c语言实现

循环冗余检验 (crc) 算法原理及c语言实现

ID:34524523

大小:247.86 KB

页数:14页

时间:2019-03-07

循环冗余检验 (crc) 算法原理及c语言实现_第1页
循环冗余检验 (crc) 算法原理及c语言实现_第2页
循环冗余检验 (crc) 算法原理及c语言实现_第3页
循环冗余检验 (crc) 算法原理及c语言实现_第4页
循环冗余检验 (crc) 算法原理及c语言实现_第5页
资源描述:

《循环冗余检验 (crc) 算法原理及c语言实现》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、CRC校验算法原理及C语言实现(作者:wilsonQQ:106365089e-mail:wilsonwong@126.comhttp://blog.chinaunix.net/u1/59572)一、CRC直接计算校验方法C实现……………………………………………………………………………………………….二、CRC查表法校验方法C实现……………………………………………………………………………………………….三、CRC校验测试代码…………………………………………………………………………………………………………….四、附录a)循环冗余检验(CRC)算法原理………………………………

2、………………………………………………………….b)CyclicRedundancyCheck(CRC)原理及实现……………………………………………………………………………..一、CRC直接计算校验方法C实现#include"StdAfx.h"#include"CrcCheck.h"//8位字符串校验unsignedcharCCrcCheck::crc8(constunsignedchar*str,unsignedintlen,unsignedcharpoly){unsignedcharreg_crc;unsignedchars_crcchk;s_crcchk=0;reg

3、_crc=0xff;//CRC预设while(len--){unsignedcharc=*str++;//取一个字节运算reg_crc^=c;//*data++;//处理一个字节(异或)for(s_crcchk=0;s_crcchk<8;s_crcchk++){//循环处理字节中的每一位if(reg_crc&0x01)//低位在前,高位在后(低位----高位){//余式高位为//reg_crc=(reg_crc>>1)^0xa001;reg_crc>>=1;reg_crc=reg_crc^poly;}else{//余式高位为(与异或保持不变)reg_crc=reg_cr

4、c>>1;}}}returnreg_crc;}//16位字符串校验(逆向CRC算法,左边是低位,右边是高位)unsignedshortCCrcCheck::crc16(constunsignedchar*str,unsignedintlen,unsignedshortpoly){unsignedshortreg_crc;unsignedshorts_crcchk;s_crcchk=0;reg_crc=0xffff;//CRC预设//CRC预设,CRC预设值一般为全或全,预设值不同,CRC结果也不同;另外,正向算法和逆向算法的CRC结果也不同//每次从字符串里取最高位字节

5、与CRC寄存器异或后回存到CRC寄存器,然后根据CRC寄存器最高位进行操作//最高位为//CRC寄存器去掉最高位(因为多项式最高位总是为,所以跟CRC寄存器最高位异或值总为)//CRC寄存器与多项式异或(注意:此多项式已把最高位省略,故无需移位操作)//最高位为//寄存器向高位移位//迭代次,本字节CRC校验结束,结果存放在CRC寄存器以备下一个字节计算reg_crc=0x0;while(len--){//把字符串分为每个字节处理的数学理论基础://axorb=a+b=a-b//word=byte_h+byte_l,例word=0xABCD,byte_h=0xAB00,

6、byte_l=0x00CD//wordxorb=(byte_h+byte_l)xorb=byte_hxorbxorbyte_l;//因此字符串可以按字节处理,并把上一字节的处理结果与下一字节继续运算unsignedcharc=*str++;reg_crc^=c;//*data++;//处理一个字节//计算b'for(s_crcchk=0;s_crcchk<8;s_crcchk++){//循环处理字节中的每一位if(reg_crc&0x01)//低位在前,高位在后{//余式高位为//reg_crc=(reg_crc>>1)^0xa001;reg_crc>>=1;//16位

7、宽度算法总位长为位,最高位总是为,在多项式已经隐藏掉,故poly不用右移一位//例poly=0xa001,实际多项式应为0x1a001=11010000000000001Breg_crc=reg_crc^poly;}else{//余式高位为reg_crc=reg_crc>>1;}}}returnreg_crc;}//32位字符串校验unsignedintCCrcCheck::crc32(constunsignedchar*str,unsignedintlen,unsignedintpoly){unsignedintreg_crc;unsi

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。