hash/crc32
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
包文件
crc32.go crc32_amd64.go crc32_generic.go
常量
预定义的多项式。
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 校验和的大小(以字节为单位)。
const Size = 4
变量
IEEETable 是 IEEE 多项式的表格。
var IEEETable = simpleMakeTable(IEEE)
func Checksum(查看源代码)
func Checksum(data []byte, tab *Table) uint32
校验和使用表格表示的多项式返回数据的 CRC-32 校验和。
func ChecksumIEEE(查看源代码)
func ChecksumIEEE(data []byte) uint32
ChecksumIEEE 使用 IEEE 多项式返回数据的 CRC-32 校验和。
func New(查看源代码)
func New(tab *Table) hash.Hash32
New 创建一个新的 hash.Hash32 ,使用表中表示的多项式计算 CRC-32 校验和。它的 Sum 方法将以 big-endian 字节顺序排列值。
func NewIEEE(查看源代码)
func NewIEEE() hash.Hash32
NewIEEE 创建一个新的 hash.Hash32 ,使用 IEEE 多项式计算 CRC-32 校验和。它的 Sum 方法将以 big-endian 字节顺序排列值。
func Update(查看源代码)
func Update(crc uint32, tab *Table, p []byte) uint32
更新返回将 p 中的字节添加到 crc 的结果。
type Table(查看源代码)
表格是一个256字的表格,表示高效处理的多项式。
type Table [256]uint32
func MakeTable(查看源代码)
func MakeTable(poly uint32) *Table
MakeTable 返回一个由指定多项式构成的表。该表的内容不得修改。
示例
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))
}