首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

hash/crc32

  • import "hash/crc32"
  • 概述
  • 索引
  • 示例

概述

Package crc32 实现32位循环冗余校验或 CRC-32 校验和。有关信息,请参阅http://en.wikipedia.org/wiki/Cyclic_redundancy_check

多项式以 LSB 优先形式表示,也称为反转表示形式。

索引

  • 常量
  • 变量
  • func Checksum(data []byte, tab *Table) uint32
  • func ChecksumIEEE(data []byte) uint32
  • func New(tab *Table) hash.Hash32
  • func NewIEEE() hash.Hash32
  • func Update(crc uint32, tab *Table, p []byte) uint32
  • type Table
  • func MakeTable(poly uint32) *Table

示例

MakeTable

包文件

常量

预定义的多项式。

代码语言:txt
复制
const (
        // IEEE是迄今为止最常见的CRC-32多项式。
        // 由以太网(IEEE 802.3),v.42,fddi,gzip,zip,png,......使用
        IEEE = 0xedb88320

        // Castagnoli的多项式,用于iSCSI。
        // 具有比IEEE更好的错误检测特性。
        // http://dx.doi.org/10.1109/26.231911
        Castagnoli = 0x82f63b78

        // 库普曼(Koopman's)的多项式。
        // 还具有比IEEE更好的错误检测特性。
        // http://dx.doi.org/10.1109/DSN.2002.1028931
        Koopman = 0xeb31d82e
)

CRC-32 校验和的大小(以字节为单位)。

代码语言:javascript
复制
const Size = 4

变量

IEEETable 是 IEEE 多项式的表格。

代码语言:javascript
复制
var IEEETable = simpleMakeTable(IEEE)
代码语言:javascript
复制
func Checksum(data []byte, tab *Table) uint32

校验和使用表格表示的多项式返回数据的 CRC-32 校验和。

func ChecksumIEEE(查看源代码)

代码语言:javascript
复制
func ChecksumIEEE(data []byte) uint32

ChecksumIEEE 使用 IEEE 多项式返回数据的 CRC-32 校验和。

代码语言:javascript
复制
func New(tab *Table) hash.Hash32

New 创建一个新的 hash.Hash32 ,使用表中表示的多项式计算 CRC-32 校验和。它的 Sum 方法将以 big-endian 字节顺序排列值。

代码语言:javascript
复制
func NewIEEE() hash.Hash32

NewIEEE 创建一个新的 hash.Hash32 ,使用 IEEE 多项式计算 CRC-32 校验和。它的 Sum 方法将以 big-endian 字节顺序排列值。

代码语言:javascript
复制
func Update(crc uint32, tab *Table, p []byte) uint32

更新返回将 p 中的字节添加到 crc 的结果。

表格是一个256字的表格,表示高效处理的多项式。

代码语言:javascript
复制
type Table [256]uint32

func MakeTable(查看源代码)

代码语言:javascript
复制
func MakeTable(poly uint32) *Table

MakeTable 返回一个由指定多项式构成的表。该表的内容不得修改。

示例

代码语言:txt
复制
package main

import (
	"fmt"
	"hash/crc32"
)

func main() {
	// 在此包中,CRC多项式以反转符号表示,
	// 或LSB优先表示。
	//
	// LSB优先表示是一个带有n位的十六进制数,其中
	// 最高有效位表示x?和最低有效系数
	// bit表示x?-1的系数(x?的系数是隐含的)。
	//
	// 例如,CRC32-Q,由以下多项式定义,
	//	x??+ x??+ x??+ x??+ x??+ x??+ x?+ x?+ x?+ x?+ x?+ x?
	// 具有反转符号0b11010101100000101000001010000001,所以该值
	// 应该传递给MakeTable的是0xD5828281。
	crc32q := crc32.MakeTable(0xD5828281)
	fmt.Printf("%08x\n", crc32.Checksum([]byte("Hello world"), crc32q))
}

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com