求vb.net中的crc32类
RT
网上搜索了很多,但是没一个不出问题的。
[最优解释]
嘿 手头正好有一个
Public Class CRC32
Private Shared CRC32Table() As Integer
Private Const BUFFER_SIZE As Integer = 1024
Public Shared Function GetCRC32(ByVal file As String) As Integer
Return GetCRC32(file, System.Text.Encoding.Default)
End Function
Public Shared Function GetCRC32(ByVal file As String, ByVal encoding As System.Text.Encoding) As Integer
Dim sr As System.IO.StreamReader = New System.IO.StreamReader(file, encoding)
Dim Result As Integer = GetCRC32(sr.BaseStream)
sr.Close()
Return Result
End Function
Public Shared Function GetCRC32(ByRef stream As System.IO.Stream) As Integer
Dim crc32Result As Integer
crc32Result = &HFFFFFFFF
Dim buffer(BUFFER_SIZE) As Byte
Dim readSize As Integer = BUFFER_SIZE
Dim count As Integer = stream.Read(buffer, 0, readSize)
Dim i As Integer
Dim iLookup As Integer
Dim tot As Integer = 0
Do While (count > 0)
For i = 0 To count - 1
iLookup = (crc32Result And &HFF) Xor buffer(i)
crc32Result = ((crc32Result And &HFFFFFF00) \ &H100) And &HFFFFFF
crc32Result = crc32Result Xor CRC32Table(iLookup)
Next i
count = stream.Read(buffer, 0, readSize)
Loop
Return Not (crc32Result)
End Function
Shared Sub New()
Dim dwPolynomial As Integer = &HEDB88320
Dim i As Integer, j As Integer
ReDim CRC32Table(256)
Dim dwCrc As Integer
For i = 0 To 255
dwCrc = i
For j = 8 To 1 Step -1
If (dwCrc And 1) Then
dwCrc = ((dwCrc And &HFFFFFFFE) \ 2&) And &H7FFFFFFF
dwCrc = dwCrc Xor dwPolynomial
Else
dwCrc = ((dwCrc And &HFFFFFFFE) \ 2&) And &H7FFFFFFF
End If
Next j
CRC32Table(i) = dwCrc
Next i
End Sub
End Class