使用VB6.0实现CRC32计算

使用VB6.0实现CRC32计算

Public AppCRCcheckSum As Long
AppCRCcheckSum = &HFFFFFFFF

Private Function move_oneBitRight(ByVal mdat As Long) As Long
    Dim dat(32) As Long
    Dim Cc As Long
    
    Dim Bdata As Long
    '------取各位数值---------
    For i = 0 To 31
        If i < 31 Then
            Cc = 2 ^ i
        Else
            Cc = &H80000000  'LONG在VB6中是有符号类型,所以在这里做特殊处理
        End If
        
        If (mdat And Cc) = Cc Then
            dat(i) = 1
        Else
            dat(i) = 0
        End If
    Next i
    '向右移一位操作
    For i = 0 To 31
        dat(i) = dat(i + 1)
    Next i
    '转化为10进制数
    Cc = 0
    Do
        dat(Cc) = dat(Cc) * 2 ^ Cc
        Cc = Cc + 1
        If Cc > 31 Then Exit Do
    Loop
    '合成转化之后的数
    Bdata = 0
    For i = 0 To 31
        Bdata = Bdata + dat(i)
    Next i
    '返回右移一位的数字
    move_oneBitRight = Bdata
End Function

Public Sub Crc32_HashCalc(size As Long, CodeDataBuff() As Byte)
    Dim i As Long
    Dim j As Integer
    Dim crc As Long

    crc = AppCRCcheckSum
    '循环处理每个字节
    For i = 0 To size - 1
        '把当前字节与 crc 的低 8 位进行异或操作
        crc = crc Xor CodeDataBuff(i)
        '处理当前字节的 8 位,每次处理一位
        For j = 0 To 7
            If crc And &H1 Then '如果 crc 的最低位为 1,则右移并与多项式除数进行异或操作
                crc = move_oneBitRight(crc)
                crc = crc Xor &HEDB88320
            Else
                crc = move_oneBitRight(crc) '否则,只右移一个比特位
            End If
        Next j
    Next i
    AppCRCcheckSum = crc

End Sub

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进击的横打

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值