以VB为例CRC-16首先建立一个模块
'BCR
以VB为例CRC-16首先建立一个模块
'BCRC是所要计算的进制值(16或32),如16位CRC时,其值即为16
'GP是生成多项式,以16进制表示较佳
'BDF是欲求出CRC的原始数值
'返回值即是计算后的CRC值
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Function CalCRC(BCRC As Integer, GP As Long, BDF As Long) As Long
Dim C1&, C2&
Dim A1%, PreC1&
Dim LeftValue%, A1Shift%
If BDF = 0 Then
CalCRC = 0
Exit Function
End If
A1 = (Len(Hex(BDF)) - 1) * 4 '求出第一次的参考偏移位元值
C1 = BDF * 2 ^ BCRC '将被求值先乘上位值
LeftValue = Val("&H" & Mid(Hex(BDF), 1, 1)) '取出最左边的值
If LeftValue >= 1 Then A1Shift = 1 '只有一位数,权值为1
If LeftValue >= 2 Then A1Shift = 2 '只有二位数,权值为2
If LeftValue >= 4 Then A1Shift = 3 '只有三位数,权值为3
If LeftValue >= 8 Then A1Shift = 4 '四位数,权值为4
A1 = A1 + (A1Shift - 1) '第一次的偏移值
C2 = GP * 2 ^ A1 '第一次的运算值
Do
PreC1 = C1 '记录先前值
C1 = C1 Xor C2 '二进制长除法之余数
Do
A1 = A1 - 1 '''
If C1 > PreC1 Then '若余数大于生成多项式,则予以降序
C1 = PreC1 Xor (GP * 2 ^ A1)
Else
Exit Do
End If
Loop
C2 = GP * 2 ^ A1 '下一次的运算值
Loop Until C1 <= GP '直到余数小于生成多项式
CalCRC = C1
End Function
之后做三个LABEL( 原值,CRC值,生成多项式)三个TEXTBOX控件. 再加一个COMMANDBUTTON控件(计算)
双击计算填入下面代码~
'''''''''''''''''''''''''''''''''''''''''''''
Private Sub Command1_Click()
Dim BCRC%, GP&, BDF&
BCRC = 16 '指定计算的范围是16位数的CRC
GP = Val("&H" & CStr(Text2.Text) & "&") '转换生成多项式值为十六进制数值
BDF = Val("&H" & CStr(Text1.Text) & "&") '转换求值字符串为十六进制数值
Text3 = Hex(CalCRC(BCRC, GP, BDF)) '调用CRC子程序
End Sub