全面分析CRC算法

简介: result = ~crcGetRegisters();          // 填写FCS,先低后高     ppp[11] = result & 0xff;     ppp[12] = (result >> 8) & 0xff;   ...

result = ~crcGetRegisters();
    
    // 填写FCS,先低后高
    ppp[11] = result & 0xff;
    ppp[12] = (result >> 8) & 0xff;
    
    /////////// 以下验证FCS
    
    // 初始化
    crcInitRegisters();
    
    // 逐位输入,每个字节低位在先,包括两个FCS字节
    for(i = 0; i < 13; i++)
    {
        for(j = 0; j < 8; j++)
        {
            crcInputBit((ppp[i] >> j) & 1);
        }
    }
    
    // 得到验证结果
    result = crcGetRegisters();

可以看到,计算出的CRC等于0x3AD0,与原来的FCS相同。验证结果等于0。初始化为全"1",以及将寄存器组的值求反得到CRC,都是CRC-ITU的要求。事实上,不管初始化为全"1"还是全"0",计算CRC取反还是不取反,得到的验证结果都是0。


    4 字节型算法
比特型算法逐位进行运算,效率比较低,不适用于高速通信的场合。数字通信系统(各种通信标准)一般是对一帧数据进行CRC校验,而字节是帧的基本单位。最常用的是一种按字节查表的快速算法。该算法基于这样一个事实:计算本字节后的CRC码,等于上一字节余式CRC码的低8位左移8位,加上上一字节CRC右移8位和本字节之和后所求得的CRC码。如果我们把8位二进制序列数的CRC(共256个)全部计算出来,放在一个表里 ,编码时只要从表中查找对应的值进行处理即可。

CRC-ITU的计算算法如下:
a.寄存器组初始化为全"1"(0xFFFF)。
b.寄存器组向右移动一个字节。
c.刚移出的那个字节与数据字节进行异或运算,得出一个指向值表的索引。
d.索引所指的表值与寄存器组做异或运算。
f.数据指针加1,如果数据没有全部处理完,则重复步骤b。
g.寄存器组取反,得到CRC,附加在数据之后。
         
CRC-ITU的验证算法如下:
a.寄存器组初始化为全"1"(0xFFFF)。
b.寄存器组向右移动一个字节。
c.刚移出的那个字节与数据字节进行异或运算,得出一个指向值表的索引。
d.索引所指的表值与寄存器组做异或运算。
e.数据指针加1,如果数据没有全部处理完,则重复步骤b (数据包括CRC的两个字节)。
f.寄存器组的值是否等于“Magic Value”(0xF0B8),若相等则通过,否则失败。
本文来自: 中国自学编程网(www.zxbc.cn) 详细出处参考:http://zxbc.cn/html/20070604/21075_5.html

相关文章
|
8月前
|
存储 算法
5.0 CRC32校验技术概述
CRC校验技术是用于检测数据传输或存储过程中是否出现了错误的一种方法,校验算法可以通过计算应用与数据的循环冗余校验(CRC)检验值来检测任何数据损坏。通过运用本校验技术我们可以实现对特定内存区域以及磁盘文件进行完整性检测,并以此来判定特定程序内存是否发生了变化,如果发生变化则拒绝执行,通过此种方法来保护内存或磁盘文件不会被非法篡改。总之,内存和磁盘中的校验技术都是用于确保数据和程序的完整性和安全性的重要技术。
132 1
5.0 CRC32校验技术概述
|
7月前
CRC循环冗余码计算
CRC循环冗余码计算
61 0
|
8月前
|
存储 算法
5.1 内存CRC32完整性检测
CRC校验技术是用于检测数据传输或存储过程中是否出现了错误的一种方法,校验算法可以通过计算应用与数据的循环冗余校验(CRC)检验值来检测任何数据损坏。通过运用本校验技术我们可以实现对特定内存区域以及磁盘文件进行完整性检测,并以此来判定特定程序内存是否发生了变化,如果发生变化则拒绝执行,通过此种方法来保护内存或磁盘文件不会被非法篡改。总之,内存和磁盘中的校验技术都是用于确保数据和程序的完整性和安全性的重要技术。
114 2
|
11月前
|
算法 C语言
LabVIEW实现CRC校验
CRC(循环冗余校验),是一种根据网络数据包或计算机文件等数据产生简短固定位数校验码的一种信道编码技术,主要用来检测或校验数据传输或者保存后可能出现的错误。它是利用除法及余数的原理来作错误侦测的。
LabVIEW实现CRC校验
|
11月前
|
算法 安全 数据格式
几行代码实现CRC循环冗余检验
几行代码实现CRC循环冗余检验
10296 0
几行代码实现CRC循环冗余检验
|
算法
CRC 校验算法
CRC 校验算法
214 0
|
存储 算法 编译器
CRC循环校验码的系统仿真及其应用
CRC循环校验码的系统仿真及其应用
537 0
CRC循环校验码的系统仿真及其应用
|
测试技术 开发者
|
算法 C语言 索引