欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

请教查表法计算CRC的原理

请教查表法计算CRC的原理

在学CRC算法原理,受挫啊,这么一个简单的算法竟然看不懂 
下面引用一下vipchenji 《CRC技术的实现与破解》的原文
-----------------------------------------------------------------------------------------------------
下面就给您介绍CRC检验码的计算过程(查表法)
(1)将上次计算出的CRC校验码右移一个字节;
(2)将移出的这个字节与新的要校验的字节进行XOR 运算;
(3)用运算出的值在预先生成码表中进行索引,获取对应的值(称为余式);
(4)用获取的值与第(1)步右移后的值进行XOR 运算;
(5)如果要校验的数据已经处理完,则第(4)步的结果就是最终的CRC校验码。如果还有数据 要进行处理,则再转到第(1)步运行。
CRC32=CRC_32_Tbl[(CRC32^((unsigned__int8*)p)[i])&0xff]^(CRC32>>8);
怎么样?简单吧。
下面是完整的一个实现函数,更加简单:
//--------------------------------------------
//CalcCRC32函数计算出给定数据串的CRC-32校验码
//Code : Chenji
//--------------------------------------------
unsigned int CalcCRC32(void *DataBuff,unsigned int BufLen)
{//DataBuff是指向数据串的指针,BufLen是数据串的长度
    unsigned int CRC32=0xffffffff; //设置初始值
for(unsigned long i=0; i<BufLen; ++i)
   CRC32 = CRC_32_Tbl[(CRC32^((unsigned __int8 *)DataBuff)[i]) & 0xff] ^ (CRC32>>8); 
//如果你的编译器不支持unsigned __int8定义,请试用unsigned char
    return CRC32;
}
-------------------------------------------------------------------------------------------
请知道的或看懂的各位给我详细讲解一下查表法计算CRC的这个过程是怎么来的,实在是资质欠佳,看了很多天没头绪,也参考了部分资料(附件里),还是不懂 ,谢谢!

上传的附件 循环冗余检验 (CRC) 算法原理 - 舒杰的IT博客 - 博客园.rar

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功