30 lines
940 B
VB.net
30 lines
940 B
VB.net
Public Class Crc32
|
|
|
|
' Table for pre-calculated values.
|
|
Shared table(255) As UInteger
|
|
|
|
' Initialize table
|
|
Shared Sub New()
|
|
For i As UInteger = 0 To table.Length - 1
|
|
Dim te As UInteger = i ' table entry
|
|
For j As Integer = 0 To 7
|
|
If (te And 1) = 1 Then te = (te >> 1) Xor &HEDB88320UI Else te >>= 1
|
|
Next
|
|
table(i) = te
|
|
Next
|
|
End Sub
|
|
|
|
' Return checksum calculation for Byte Array,
|
|
' optionally resuming (used when breaking a large file into read-buffer-sized blocks).
|
|
' Call with Init = False to continue calculation.
|
|
Public Shared Function cs(BA As Byte(), Optional Init As Boolean = True) As UInteger
|
|
Static crc As UInteger
|
|
If Init Then crc = UInteger.MaxValue
|
|
For Each b In BA
|
|
crc = (crc >> 8) Xor table((crc And &HFF) Xor b)
|
|
Next
|
|
Return Not crc
|
|
End Function
|
|
|
|
End Class
|