非常教程

Go参考手册

散列 | hash

hash/crc32

  • 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 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))
}
Go

Go 是一种编译型语言,它结合了解释型语言的游刃有余,动态类型语言的开发效率,以及静态类型的安全性。它也打算成为现代的,支持网络与多核计算的语言。要满足这些目标,需要解决一些语言上的问题:一个富有表达能力但轻量级的类型系统,并发与垃圾回收机制,严格的依赖规范等等。这些无法通过库或工具解决好,因此Go也就应运而生了。

主页 https://golang.org/
源码 https://go.googlesource.com/go
发布版本 1.9.2

Go目录

1.档案 | archive
2.缓冲区 | bufio
3.内置 | builtin
4.字节 | bytes
5.压缩 | compress
6.容器 | container
7.上下文 | context
8.加密 | crypto
9.数据库 | database
10.调试 | debug
11.编码 | encoding
12.错误 | errors
13. expvar
14.flag
15. fmt
16. go
17.散列 | hash
18.html
19.图像 | image
20.索引 | index
21.io
22.日志 | log
23.数学 | math
24. math/big
25.math/bits
26.math/cmplx
27.math/rand
28.拟态 | mime
29.net
30.net/http
31. net/mail
32. net/rpc
33.net/smtp
34. net/textproto
35. net/url
36.os
37.路径 | path
38.插件 | plugin
39.反射 | reflect
40.正则表达式 | regexp
41.运行时 | runtime
42.排序算法 | sort
43.转换 | strconv
44.字符串 | strings
45.同步 | sync
46.系统调用 | syscall
47.测试 | testing
48.文本 | text
49.时间戳 | time
50.unicode
51.不安全性 | unsafe
52.Go 语言数据类型
53.Go 语言基础语法
54.Go 语言结构
55.Go 语言 select 语句
56.Go 语言 switch 语句
57.Go 语言 if 语句嵌套
58.Go 语言 if…else 语句
59.Go 语言 if 语句
60.Go 语言运算符
61.Go 语言常量
62.Go 语言函数闭包
63.Go 语言函数作为实参
64.Go 语言函数引用传递值
65.Go 语言函数值传递值
66.Go 语言函数
67.Go 语言 goto 语句
68.Go 语言 continue 语句
69.Go 语言 break 语句
70.Go 语言循环嵌套
71.Go 语言 for 循环
72.Go 语言结构体
73.Go 语言指针作为函数参数
74.Go 语言指向指针的指针
75.Go 语言指针数组
76.Go 语言指针
77.Go 语言向函数传递数组
78.Go 语言多维数组
79.Go 语言变量作用域
80.Go 语言函数方法
81.Go 错误处理
82.Go 语言接口
83.Go 语言类型转换
84.Go 语言递归函数
85.Go 语言Map(集合)
86.Go 语言范围(Range)
87.Go 语言切片(Slice)
88.Go 并发
89.Go fmt.Sprintf 格式化字符串