CRC32位校验码的源代码
来源:互联网 发布:产品怎样找淘宝经销商 编辑:程序博客网 时间:2024/04/30 11:40
' 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位校验码的源代码
- CRC32位校验码的源代码(VB.NET)
- JAVA计算文件的crc32校验码
- java 生成文件的 CRC32校验码
- CRC校验码的源代码
- lua CRC32校验码生成
- 一个获取文件crc32校验码的简洁的java类
- 一个获取文件crc32校验码的简洁的java类
- 以太网帧FCS校验码CRC32的三种实现方法
- go语言使用crc32得到网络消息的校验码
- 以太网帧FCS校验码CRC32的三种实现方法
- 18位身份证号码校验码的算法
- ISBN 10位校验码的计算方法
- 【原】以太网帧FCS校验码CRC32的三种实现方法
- 用python实现crc32求字符串校验码
- 用python实现crc32求字符串校验码
- 控制台的8位信息位的海明校验码
- 参照安卓计算CRC16校验码的方法获取Objective-C的CRC16位校验码
- 我的第一篇BLOG
- ^_^
- 将金额转换到大写数字的函数
- 没有被谁打败,我们可以昂首回家
- 将你的网站提交到全球15大搜索引擎
- CRC32位校验码的源代码
- 我们这一代的教育就是如此还是我们的悲哀!
- 轻轻松松创建网页目录树菜单
- 记录集用GetRows返回数组时的分页
- taglib query perpage
- 第一篇文章该写些什么?
- 满江红
- Better CVS: Subversion
- ASP 开发准则