论文网
English Papers
万事OK网
发表论文
 
 首页 > IT文章 > 程序设计 >
CRC算法原理及C语言实现

[科技论文网] http://www.scipapers.com    2007-12-01  


         ----                         --   |
          1100                         30  |
          1001    -                    27  -
          ----                         --
           0110                         3 -> 余数
           0000    -
           ----
            1100
            1001    -
            ----
             011 -> 3, 余数

    在CRC算法中:
    1001/1111000\1110               9/120\14 余数为 6
         1001    -
         ----
          1100
          1001    -
          ----
           1010
           1001    -
           ----
            0110
            0000    -
            ----
             110 -> 余数
    (例 3)

      这个除法的商并不重要,也没必要去记住,因为他们仅仅是一组无关紧要的位串.真正
    重要的是余数!它就是这个值,可以说比原文件还重要的值,他就是基本的CRC.


    过度到真正的CRC码计算.

      进行一个CRC计算我们需要选则一个除数,从现在起我们称之为"poly".宽度W就是最高位
    的位置,所以这个poly 1001的W 是3,而不是4.注意最高位总是1,当你选定一个宽度,那么你只
    需要选择低W各位的值. 
      假如我们想计算一个位串的CRC码,我们想确定每一个位都被处理过,因此,我们要在目标
    位串后面加上W个0位.在此例中,我们假设位串为1111.请仔细分析下面一个例子:

    Poly                = 10011, 宽度 W=4
    位串                Bitstring
    Bitstring + W zeros = 110101101 + 0000

    10011/1101011010000\110000101 (我们不关心此运算的商)
          10011|||||||| -
          -----||||||||
           10011|||||||
           10011|||||||  -
           -----|||||||
            00001||||||
            00000||||||   -
            -----||||||
             00010|||||
             00000|||||    -
             -----|||||
              00101||||
              00000||||     -
              -----||||
               01010|||
               00000|||      -
               -----|||
                10100||
                10011||       -
                -----||
                 01110|
                 00000|        -
                 -----|
                  11100
                  10011         -
                  -----
                   1111 -> 余数 -> the CRC!
    (例 4)

    重要两点声明如下:
    1.只有当Bitstring的最高位为1,我们才将它与poly做XOR运算,否则我们只是将
      Bitstring左移一位.
    2.XOR运算的结果就是被操作位串bitstring与低W位进行XOR运算,因为最高位总为0.

    算法设计:

      你们都应知道基于位运算的算法是非常慢的而且效率低下.但如果将计算放在每一字节上
    进行,那么效率将大大提高.不过我们只能接受poly的宽度是8的倍数(一个字节;).可以形
    象的看成这样一个宽度为32的poly(W=32):

              3   2   1   0    byte
            +---+---+---+---+
    Pop! <--|   |   |   |   |<-- bitstring with W zero bits added, in this case 32
            +---+---+---+---+
           1<--- 32 bits ---> this is the poly, 4*8 bits

    (figure 1)
      这是一个你用来存放暂时CRC结果的记存器,现在我称它为CRC记存器或者记存器.你从右
    至左移动位串,当从左边移出的位是1,则整个记存器被与poly的低W位进行XOR运算.(此例
    中为32).事实上,我们精确的完成了上面除法所做的事情.


    移动前记存器值为:10110100
    当从右边移入4位时,左边的高4位将被移出,此例中1011将被移出,而1101被移入.

    情况如下:
    当前8位CRC记存器      : 01001101
    刚刚被移出的高4位     : 1011
    我们用此poly          : 101011100, 宽度 W=8

    现在我们用如前介绍的方法来计算记存器的新值.
    顶部  记存器
    ---- --------
    1011 01001101  高四位和当前记存器值
    1010 11100   + (*1) Poly 放在顶部最高位进行XOR运算 (因为那里是1)
    -------------
    0001 10101101 运算结果

    现在我们仍有一位1在高4位:
    0001 10101101  上一步结果
       1 01011100+ (*2) Poly 放在顶部的最低位进行XOR运算 (因为那里是1)
    -------------
    0000 11110001 第二步运算结果
    ^^^^
    现在顶部所有位均为0,所以我们不需要在与poly进行XOR运算

    你可以得到相同的结果如果你先将(*1)与(*2)做XOR然后将结果与记存器值做XOR.
    这就是标准XOR运算的特性:
    (a XOR b) XOR c = a XOR (b XOR c)  由此,推出如下的运算顺序也是正确的.

    1010 11100       poly  (*1)    放在顶部最高位
       1 01011100+   polys (*2)    放在顶部最低位
    -------------
    1011 10111100  (*3) XOR运算结果

    The result (*3)   将(*3)与记存器的值做XOR运算
    1011 10111100
    1011 01001101+    如右:
    -------------
    0000 11110001

    你看到了吗?得到一样的结果!现在(*3)变的重要了,因为顶部为1010则(3)的值总是等于
    10111100(当然是在一定的条件之下)这意味着你可以预先计算出任意顶部位结合的XOR值.    来源:

声明:本文由网友推荐或作者提交,版权归原作者所有,刊登此文仅为传播知识,展示研究成果,提高文章引用率。未经原作者授权,禁止用于任何形式的商业行为。科技论文网倡导尊重知识、尊重劳动、保护原创、知识共享。由于部分论文文章来于网络,文章作者不祥,请相关的原创作者与我们联系,以便加上您的署名。

上一页 1 2 3 4 5 6 7 8 9 下一页  
CRC算法原理及C语言实现
下面没有链接了     欧几里德算法及其实现
最新论文
·[程序设计]CRC算法原理及C语言实现
·[程序设计]欧几里德算法及其实现
·[程序设计]蚁群算法Python实现
·[程序设计]图像二值化算法源码
·[程序设计]经典面试问题:12小球问题算法2
·[程序设计]经典面试问题:12小球问题算法
·[程序设计]图像几何变换插值算法
·[程序设计]C算法—堆排序
·[程序设计]人机博弈程序实现
·[程序设计]A*算法Python实现
 
 

搜索论文

Google
论文分类

论文网 论文发表网 论文 免费论文网 找论文网 毕业论文 中国论文网 英语论文 百度论文 聘教网 易搜
 免费发布论文    中国论文网 2008版权所有  业务联系:pinjiao@126.com