目录搜索
archivearchive/tararchive/zipbufiobufio(缓存)builtinbuiltin(内置包)bytesbytes(包字节)compresscompress/bzip2(压缩/bzip2)compress/flate(压缩/flate)compress/gzip(压缩/gzip)compress/lzw(压缩/lzw)compress/zlib(压缩/zlib)containercontainer/heap(容器数据结构heap)container/list(容器数据结构list)container/ring(容器数据结构ring)contextcontext(上下文)cryptocrypto(加密)crypto/aes(加密/aes)crypto/cipher(加密/cipher)crypto/des(加密/des)crypto/dsa(加密/dsa)crypto/ecdsa(加密/ecdsa)crypto/elliptic(加密/elliptic)crypto/hmac(加密/hmac)crypto/md5(加密/md5)crypto/rand(加密/rand)crypto/rc4(加密/rc4)crypto/rsa(加密/rsa)crypto/sha1(加密/sha1)crypto/sha256(加密/sha256)crypto/sha512(加密/sha512)crypto/subtle(加密/subtle)crypto/tls(加密/tls)crypto/x509(加密/x509)crypto/x509/pkix(加密/x509/pkix)databasedatabase/sql(数据库/sql)database/sql/driver(数据库/sql/driver)debugdebug/dwarf(调试/dwarf)debug/elf(调试/elf)debug/gosym(调试/gosym)debug/macho(调试/macho)debug/pe(调试/pe)debug/plan9obj(调试/plan9obj)encodingencoding(编码)encoding/ascii85(编码/ascii85)encoding/asn1(编码/asn1)encoding/base32(编码/base32)encoding/base64(编码/base64)encoding/binary(编码/binary)encoding/csv(编码/csv)encoding/gob(编码/gob)encoding/hex(编码/hex)encoding/json(编码/json)encoding/pem(编码/pem)encoding/xml(编码/xml)errorserrors(错误)expvarexpvarflagflag(命令行参数解析flag包)fmtfmtgogo/ast(抽象语法树)go/buildgo/constant(常量)go/doc(文档)go/format(格式)go/importergo/parsergo/printergo/scanner(扫描仪)go/token(令牌)go/types(类型)hashhash(散列)hash/adler32hash/crc32hash/crc64hash/fnvhtmlhtmlhtml/template(模板)imageimage(图像)image/color(颜色)image/color/palette(调色板)image/draw(绘图)image/gifimage/jpegimage/pngindexindex/suffixarrayioioio/ioutillogloglog/syslog(日志系统)mathmathmath/bigmath/bigmath/bitsmath/bitsmath/cmplxmath/cmplxmath/randmath/randmimemimemime/multipart(多部分)mime/quotedprintablenetnetnet/httpnet/httpnet/http/cginet/http/cookiejarnet/http/fcginet/http/httptestnet/http/httptracenet/http/httputilnet/http/internalnet/http/pprofnet/mailnet/mailnet/rpcnet/rpcnet/rpc/jsonrpcnet/smtpnet/smtpnet/textprotonet/textprotonet/urlnet/urlososos/execos/signalos/userpathpathpath/filepath(文件路径)pluginplugin(插件)reflectreflect(反射)regexpregexp(正则表达式)regexp/syntaxruntimeruntime(运行时)runtime/debug(调试)runtime/internal/sysruntime/pprofruntime/race(竞争)runtime/trace(执行追踪器)sortsort(排序算法)strconvstrconv(转换)stringsstrings(字符串)syncsync(同步)sync/atomic(原子操作)syscallsyscall(系统调用)testingtesting(测试)testing/iotesttesting/quicktexttext/scanner(扫描文本)text/tabwritertext/template(定义模板)text/template/parsetimetime(时间戳)unicodeunicodeunicode/utf16unicode/utf8unsafeunsafe
文字

  • import "hash/crc32"

  • 概述

  • 索引

  • 示例

概述

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

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

有关信息,请参阅http://en.wikipedia.org/wiki/Mathematics_of_cyclic_redundancy_checks#Reversed_representations_and_reciprocal_polynomials。

索引

  • 常量

  • 变量

  • 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 mainimport ("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))}
上一篇:下一篇: