CRC32位校验码的源代码(VB.NET)
来源:互联网 发布:elsevier sdol数据库 编辑:程序博客网 时间:2024/04/30 15:55
' Copyright (c) Wrox Press Ltd 2002. All rights reserved.
' Buyers of the Visual Basic .NET Solutions Toolkit book (ISBN 1861007396) can use this code without restriction.
' This code cannot be copied, compiled, or altered except by buyers of the aforementioned book.
' Wrox Press Ltd retains copyright of this code in all cases and unauthorized transmission, duplication, and
' publishing is forbidden.
Imports System
Imports System.IO
Namespace Wrox.Toolkit.Util
Public Class Crc32
Private Const TABLESIZE As Integer = 256
Private Const DEFAULTPOLYNOMIAL As Integer = &HEDB88320
Private Const DEFAULTINITIALVALUE As Integer = &HFFFFFFFF
Private lookup(TABLESIZE - 1) As Integer
Private crcPolynomial As Integer = 0
Public Sub New()
Me.New(DEFAULTPOLYNOMIAL)
End Sub
Public Sub New(ByVal crcPolynomial As Integer)
Me.crcPolynomial = crcPolynomial
InitLookupTable()
End Sub
Public Property Polynomial() As Integer
Get
Return crcPolynomial
End Get
Set(ByVal Value As Integer)
Me.crcPolynomial = value
InitLookupTable()
End Set
End Property
Public Overloads Function CalculateBlock(ByVal bytes() As Byte) _
As Integer
Return CalculateBlock(bytes, 0, bytes.Length)
End Function
Public Overloads Function CalculateBlock(ByVal bytes() As Byte, _
ByVal index As Integer, _
ByVal length As Integer _
) As Integer
Return CalculateBlock(bytes, index, length, DEFAULTINITIALVALUE)
End Function
Public Overloads Function CalculateBlock( _
ByVal bytes() As Byte, _
ByVal index As Integer, _
ByVal length As Integer, _
ByVal initialValue As Integer) _
As Integer
If bytes Is Nothing Then
Throw New ArgumentNullException("CalculateBlock(): bytes")
ElseIf index < 0 Or length <= 0 _
Or index + length > bytes.Length Then
Throw New ArgumentOutOfRangeException()
End If
Return Not InternalCalculateBlock(bytes, index, _
length, initialValue)
End Function
Private Function InternalCalculateBlock( _
ByVal bytes() As Byte, _
ByVal index As Integer, _
ByVal length As Integer, _
ByVal initialValue As Integer) _
As Integer
Dim crc As Integer = initialValue
Dim shiftedCrc As Integer
Dim position As Integer
For position = index To length - 1
shiftedCrc = crc And &HFFFFFF00
shiftedCrc = shiftedCrc / &H100
shiftedCrc = shiftedCrc And &HFFFFFF
crc = shiftedCrc Xor lookup(bytes(position) Xor _
(crc And &HFF))
Next
Return crc
End Function
Public Overloads Function CalculateFile(ByVal path As String) _
As Integer
Return CalculateFile(path, DEFAULTINITIALVALUE)
End Function
Public Overloads Function CalculateFile( _
ByVal path As String, _
ByVal initialValue As Integer) _
As Integer
If path Is Nothing Then
Throw New ArgumentNullException("path")
ElseIf path.Length = 0 Then
Throw New ArgumentException("Invalid path")
End If
Return Not InternalCalculateFile(path, initialValue)
End Function
Private Function InternalCalculateFile( _
ByVal path As String, _
ByVal initialValue As Integer) _
As Integer
Const blockSize As Integer = 4096
Dim count As Integer
Dim inStream As FileStream
Dim bytes(blockSize - 1) As Byte
Dim crc As Integer = initialValue
Try
inStream = File.Open(path, FileMode.Open, FileAccess.Read)
While inStream.Position < inStream.Length
count = inStream.Read(bytes, 0, blockSize)
crc = InternalCalculateBlock(bytes, 0, count, crc)
End While
Finally
If Not inStream Is Nothing Then
inStream.Close()
End If
End Try
Return crc
End Function
Private Sub InitLookupTable()
Dim byteCount, bitCount As Integer
Dim crc, shiftedCrc As Integer
For byteCount = 0 To TABLESIZE - 1
crc = byteCount
For bitCount = 0 To 7
shiftedCrc = crc And &HFFFFFFFE
shiftedCrc = shiftedCrc / &H2
shiftedCrc = shiftedCrc And &H7FFFFFFF
If (crc And &H1) Then
crc = shiftedCrc Xor crcPolynomial
Else
crc = shiftedCrc
End If
Next
lookup(byteCount) = crc
Next
End Sub
End Class
End Namespace
' Copyright (c) Wrox Press Ltd 2002. All rights reserved.
' Buyers of the Visual Basic .NET Solutions Toolkit book (ISBN 1861007396) can use this code without restriction.
' This code cannot be copied, compiled, or altered except by buyers of the aforementioned book.
' Wrox Press Ltd retains copyright of this code in all cases and unauthorized transmission, duplication, and
' publishing is forbidden.
Imports System
Imports Wrox.Toolkit.Util
Module CRC32Test
Sub Main(ByVal cmdArgs() As String)
If cmdArgs.Length <> 1 Then
Console.WriteLine("Usage: CRC32Test <path>")
Exit Sub
End If
Try
Dim crc32Val As Integer
Dim crc As New Crc32()
crc32Val = crc.CalculateFile(cmdArgs(0))
Console.WriteLine("CRC32 is {0:x}", crc32Val)
Catch e As Exception
Console.WriteLine("An exception occurred: {0}", e.Message)
End Try
End Sub
End Module
- CRC32位校验码的源代码(VB.NET)
- CRC32位校验码的源代码
- JAVA计算文件的crc32校验码
- java 生成文件的 CRC32校验码
- CRC校验码的源代码
- VB的CRC32校验代码
- lua CRC32校验码生成
- 一个获取文件crc32校验码的简洁的java类
- 一个获取文件crc32校验码的简洁的java类
- 以太网帧FCS校验码CRC32的三种实现方法
- go语言使用crc32得到网络消息的校验码
- 以太网帧FCS校验码CRC32的三种实现方法
- VB.Net控制IIS的完整源代码
- VB.Net控制IIS的完整源代码
- 短小精悍的俄罗斯方块VB.NET源代码
- VB.net的身份证15位升18位函数
- 18位身份证号码校验码的算法
- ISBN 10位校验码的计算方法
- 做好人,做善事
- 世界好大阿
- 为我的浏览器添加Rss源订阅支持
- 高精度计时器类(VB)
- CRC32算法(VB)
- CRC32位校验码的源代码(VB.NET)
- 从品三国到品商网——对易中天教授传统成新锐问题的回应
- C++, C# & Java哪种语言更好?
- [转]一个功能强大的免费路由防火墙软件-pfSense
- 快进来看看菜鸟基地
- 新的生活
- 我也可以活得很精彩
- 光盘目录
- 你是九九一族吗?