Public AppCRCcheckSum AsLong
AppCRCcheckSum =&HFFFFFFFF
PrivateFunction move_oneBitRight(ByVal mdat AsLong)AsLongDim dat(32)AsLongDim Cc AsLongDim Bdata AsLong'------取各位数值---------For i =0To31If i <31Then
Cc =2^ i
Else
Cc =&H80000000 'LONG在VB6中是有符号类型,所以在这里做特殊处理EndIfIf(mdat And Cc)= Cc Then
dat(i)=1Else
dat(i)=0EndIfNext i
'向右移一位操作For i =0To31
dat(i)= dat(i +1)Next i
'转化为10进制数
Cc =0Do
dat(Cc)= dat(Cc)*2^ Cc
Cc = Cc +1If Cc >31ThenExitDoLoop'合成转化之后的数
Bdata =0For i =0To31
Bdata = Bdata + dat(i)Next i
'返回右移一位的数字
move_oneBitRight = Bdata
EndFunctionPublicSub Crc32_HashCalc(sizeAsLong, CodeDataBuff()AsByte)Dim i AsLongDim j AsIntegerDim crc AsLong
crc = AppCRCcheckSum
'循环处理每个字节For i =0Tosize-1'把当前字节与 crc 的低 8 位进行异或操作
crc = crc Xor CodeDataBuff(i)'处理当前字节的 8 位,每次处理一位For j =0To7If crc And&H1 Then'如果 crc 的最低位为 1,则右移并与多项式除数进行异或操作
crc = move_oneBitRight(crc)
crc = crc Xor&HEDB88320
Else
crc = move_oneBitRight(crc)'否则,只右移一个比特位EndIfNext j
Next i
AppCRCcheckSum = crc
EndSub