当前位置:编程学习 > VB >>

循环冗余码!!求助

看了好久的循环冗余码,还是搞不懂,希望高手指点迷津啊
以下是一段循环冗余码的VB程序(CRC_CCITT):
Function CRC_CCITT(data() As Byte) As String
      Dim CRC16Lo As Byte, CRC16Hi As Byte
      Dim CL As Byte, CH As Byte
      Dim SaveHi As Byte, SaveLo As Byte
      Dim i As Integer
      Dim Flag As Integer
      CRC16Lo = &HFF
      CRC16Hi = &HFF
      CL = &H21
      CH = &H10
      For i = 0 To UBound(data)
        CRC16Hi = CRC16Hi Xor data(i)
        For Flag = 0 To 7
          SaveHi = CRC16Hi
          SaveLo = CRC16Lo
          If CRC16Hi * 2 > &HFF Then
            CRC16Hi = CRC16Hi * 2 - &H100
          Else
            CRC16Hi = CRC16Hi * 2
          End If
          If CRC16Lo * 2 > &HFF Then
            CRC16Lo = CRC16Lo * 2 - &H100
          Else
            CRC16Lo = CRC16Lo * 2
          End If
          If ((SaveLo And &H80) = &H80) Then
            CRC16Hi = CRC16Hi Or &H1
          End If
          If ((SaveHi And &H80) = &H80) Then
            CRC16Hi = CRC16Hi Xor CH
            CRC16Lo = CRC16Lo Xor CL
          End If
        Next Flag
      Next i
      Dim ReturnData(1) As Byte
      ReturnData(0) = CRC16Hi
      ReturnData(1) = CRC16Lo
      CRC_CCITT = ReturnData
    End Function

有两点我十分不解:
1.CCITT的生成式应该是11021H,为什么该段代码用的是1021H呢;
2.我理解的循环冗余码计算过程应该是针对整个字符串进行计算的,可是为何这段代码的计算过程完全不一样呢,而是一个字符一个字符处理。
--------------------编程问答-------------------- CRC类似除法取余的过程。
可以Google下相关代码。 --------------------编程问答-------------------- 帮项咯 --------------------编程问答--------------------
引用 1 楼 caozhy 的回复:
CRC类似除法取余的过程。
可以Google下相关代码。

CRC的除法取余跟传统的除法取余是不是有些不同
CRC的除法取余是用异或来代替减法是吗 --------------------编程问答-------------------- 这个算法好象是CRC16的算法,多项式是A001
校验的时候是移动每个位来计算的,因为没有移位操作,所以在VB下面就写起来麻烦了.
不太清楚这个ccitt是什么
--------------------编程问答-------------------- 1)对 CRC16 而言,只有低 16 位是有效的,更高位总是要被丢弃的。
2)当然是逐个字节进行计算的。 --------------------编程问答--------------------
引用 5 楼 tiger_zhao 的回复:
1)对 CRC16 而言,只有低 16 位是有效的,更高位总是要被丢弃的。
2)当然是逐个字节进行计算的。

我理解的是计算过程是这样的:


这段程序好像跟这个计算过程完全不同啊 --------------------编程问答-------------------- 你的二进制减法错误,比如第一轮的末尾:
10000-00001=10001

http://wugf.blog.sohu.com/109606803.html
补充:VB ,  基础类
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,