看了好久的循环冗余码,还是搞不懂,希望高手指点迷津啊
以下是一段循环冗余码的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.我理解的循环冗余码计算过程应该是针对整个字符串进行计算的,可是为何这段代码的计算过程完全不一样呢,而是一个字符一个字符处理。
以下是一段循环冗余码的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.我理解的循环冗余码计算过程应该是针对整个字符串进行计算的,可是为何这段代码的计算过程完全不一样呢,而是一个字符一个字符处理。
可以Google下相关代码。
CRC的除法取余是用异或来代替减法是吗
校验的时候是移动每个位来计算的,因为没有移位操作,所以在VB下面就写起来麻烦了.
不太清楚这个ccitt是什么
2)当然是逐个字节进行计算的。
10000-00001=10001http://wugf.blog.sohu.com/109606803.html