读书人

求vb.net中的crc32种

发布时间: 2012-12-14 10:33:07 作者: rapoo

求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


[其他解释]
很好很强大
谢谢,结帖。

读书人网 >VB

热点推荐