golang标准库-crc32的使用

1.概述

        crc32实现了32位循环冗余检测算法的实现。目前crc32内部提供 了三种常用的多项式,采用查表法来提高计算checksum的效率。通过crc32.MakeTable()可以获取对应的表,crc32提供了一个IEETABLE可以直接使用,官方链接如下:crc32 package - hash/crc32 - Go Packages

 图1 多项式对应常量

 2.API简介

表1 crc32对外暴露函数

函数名称参数返回值简介
Checksum

data:[]byte

tab:*crc.Table

checksum:uint32输入计算校验和的原始数据和校验方式,获取校验和。
ChecksumIEEEdata:[]bytechecksum:uint32输入计算校验和的原始数据,使用IEEE多项式获取校验和。
Newtab:*crc.Tablehash.Hash32获取特定校验方式的hash,后续调用Sum即可获取校验和
NewIEEEhash.Hash32获取IEEE方式的hash,后续调用Sum即可获取校验和
Update

crc:uint32

tab:*crc.Table

p:[]byte

checksum:uint32适用于流式数据,继续追加数据计算校验和

     官方对外暴漏了5个函数,hash和Update这两种方式支持追加数据。

3.使用样例

package mainimport ("fmt""hash/crc32"
)func main() {originalData := []byte("hello world")i3eCheckSum1 := crc32.Checksum(originalData, crc32.IEEETable)i3eCheckSum2 := crc32.ChecksumIEEE(originalData)fmt.Println(i3eCheckSum1, i3eCheckSum2)//MakeTable使用方式caTable := crc32.MakeTable(crc32.Castagnoli)kmTable := crc32.MakeTable(crc32.Koopman)caCheckSum := crc32.Checksum(originalData, caTable)kmCheckSum := crc32.Checksum(originalData, kmTable)fmt.Println("castagnoli checksum is: ", caCheckSum)fmt.Println("koopman checksum is: ", kmCheckSum)caHash := crc32.New(caTable)_, err := caHash.Write(originalData)if err != nil {panic(err)}caCheckSum1 := caHash.Sum32()fmt.Println("castagnoli checksum is: ", caCheckSum1)i3eHash := crc32.NewIEEE()//此处可以一直追加数据_, err = i3eHash.Write(originalData)if err != nil {panic(err)}i3eCheckSum3 := i3eHash.Sum32()fmt.Println("ieee checksum is: ", i3eCheckSum3)newData := []byte("你好,世界")//采用update追加数据(适用于计算之后再追加数据的场景)newCheckSum1 := crc32.Update(i3eCheckSum1, crc32.IEEETable, newData)//直接追加数据之后再计算newCheckSum2 := crc32.ChecksumIEEE(append(originalData, newData...))fmt.Println(newCheckSum1, newCheckSum2)}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/146332.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows Server2012 R2修复SSL/TLS漏洞(CVE-2016-2183)

漏洞描述 CVE-2016-2183 是一个TLS加密套件缺陷,存在于OpenSSL库中。该缺陷在于使用了弱随机数生成器,攻击者可以利用此缺陷预测随机数的值,从而成功绕过SSL/TLS连接的加密措施,实现中间人攻击。这个漏洞影响了OpenSSL 1.0.2版本…

免费开源的区域屏幕录制(gif转换)工具(支持编辑功能)

软件优点:区域截屏,直接转换为gif即刻分享,免费开源,支持编辑功能 它可以让你轻松地录制屏幕,摄像头或画板的动画,并编辑、保存为 GIF,视频或其他格式。 下载并安装 ScreenToGif 首先&#xf…

CentOS中安装常用环境

一、CentOS安装 redis ①:更新yum sudo yum update②:安装 EPEL 存储库 Redis 通常位于 EPEL 存储库中。运行以下命令安装 EPEL 存储库 sudo yum install epel-release③:安装 Redis sudo yum install redis④:启动 Redis 服…

加密数字货币:机遇与风险并存

随着区块链技术的发展和普及,加密数字货币逐渐走入人们的视线。作为一种以数字形式存在的资产,加密数字货币具有去中心化、匿名性和安全性高等特点,为人们提供了一种全新的支付方式和投资选择。然而,加密数字货币市场也存在着较高…

编译智能合约以及前端交互工具库(Web3项目一实战之三)

我们已然在上一篇 Web3项目灵魂所在之智能合约编写(Web3项目一实战之二) ,为项目写好了智能合约代码。 但身为开发人员的我们,深知高级编程语言所编写出来的代码,都是需要经过编译,而后外部方能正常调用。很显然,使用solidity这门新的高级编程语言编写出来的智能合约,也…

Python----图像的手绘效果

图像的数组表示 图像是有规则的二维数据,可以用numpy 库将图像转换成数组对象 : from PIL import Image import numpy as np imnp.array(Image.open("D://np.jpg")) print(im.shape,im.dtype)结果: 图像转换对应的ndarray 类型是3 维数据&am…

我的 2023 秋招总结,拿到了大厂offer

2023秋招小结 前言 & 介绍 作为2024年毕业的学生,在2023年也就是今年秋招。 现在秋招快结束了,人生可能没有几次秋招的机会(应该就一次,最多两次吧哈哈),也有一点感悟,所以小小总结一下。…

如何用继承和多态来打印个人信息

1 问题 在python中的数据类型中,我们常常运用继承和多态。合理地使用继承和多态可以增强程序的可扩展性使代码更简洁。那么如何使用继承和多态来打印个人信息? 2 方法 打印基本信息添加子类,再定义一个class,可以直接从Person类继…

网络规模与性能优化的一篇随笔

本周写篇轻松的话题,注意信息传输的尺度和缩放比例,写篇随笔。 控制面和数据面随规模缩放的影响,举几个例子就能说明白。 CSMA/CD,控制面和数据面在一起,控制信息交互时延和数据面时延在同一尺度时,就到了…

ASP.NET限流器的简单实现

一、滑动时间窗口 我为RateLimiter定义了如下这个简单的IRateLimiter接口,唯一的无参方法TryAcquire利用返回的布尔值确定当前是否超出设定的速率限制。我只提供的两种基于时间窗口的实现,如下所示的基于“滑动时间窗口”的实现类型SliddingWindowRateL…

Java编程中,异步操作流程中,最终一致性以及重试补偿的设计与实现

一、背景 微服务设计中,跨服务的调用,由于网络或程序故障等各种原因,经常会出现调用失败而需要重试。另外,在异步操作中,我们提供接口让外部服务回调。回调过程中,也可能出现故障。 这就要求我们主动向外…

vim批量多行缩进调整

网上其他教程&#xff1a; ctrl v 或者 v进行visual模式按方向键<&#xff0c;>调整光标位置选中缩进的行Shift > &#xff08;或者 Shift < &#xff09;进行左右缩进。 我只想说&#xff0c;乱七八糟&#xff0c;根本不管用 本文教程&#xff1a; 增加缩进…

物联网网关在工业行业的应用案例

物联网网关在工业行业的应用案例 随着物联网技术的不断发展&#xff0c;物联网网关在工业行业的应用越来越广泛。本文将介绍一个物联网网关在工业行业的应用案例&#xff0c;以期为相关领域的研究和实践提供借鉴和启示。 一、案例背景 某大型制造企业是一家全球知名的汽车制…

高防IP是什么,高防IP有什么作用?

什么是高防IP&#xff1f; 高防IP是一款专业解决大流量攻击的安全防护产品&#xff0c;支持网站和非网站类业务的DDoS、CC防护&#xff0c;用户通过配置转发规则&#xff0c;将攻击流量引至高防IP并清洗&#xff0c;保障业务稳定可用&#xff0c;具有灾备能力&#xff0c;线路…

剑指offer --- 用两个栈实现队列的先进先出特性

目录 前言 一、读懂题目 二、思路分析 三、代码呈现 总结 前言 当我们需要实现队列的先进先出特性时&#xff0c;可以使用栈来模拟队列的行为。本文将介绍如何使用两个栈来实现队列&#xff0c;并给出具体的思路和代码实现。 一、读懂题目 题目&#xff1a;用两个栈实现一…

[ 云计算 | AWS ] AI 编程助手新势力 Amazon CodeWhisperer:优势功能及实用技巧

文章目录 一、Amazon CodeWhisperer 简介1.1 CodeWhisperer 是什么1.2 Amazon CodeWhisperer 是如何工作的 二、Amazon CodeWhisperer 的优势和功能2.1 Amazon CodeWhisperer 的优势2.2 Amazon CodeWhisperer 的代码功能 三、Amazon CodeWhisperer 安装3.1 安装到 IntelliJ IDE…

计算数组中每个元素的立方根numpy.cbrt()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 计算数组中每个元素的立方根 numpy.cbrt() [太阳]选择题 请问以下代码中执行语句输出结果是&#xff1f; import numpy as np a np.array([1, 8, 27]) print("【显示】a ",a) pr…

synchronized jvm实现思考

底层实现时&#xff0c;为什么使用了cxq队列和entryList双向链表&#xff1f;这里为什么不跟AQS中使用一个队列就行了&#xff0c;加了一个entryList的目的是为了什么&#xff1f; 个人理解这里多一个entryList&#xff0c;可能是用于减少频繁的cas操作。假设存在很多锁竞争时&…

【Linux】gcc/g++ gdb 使用

目录 1&#xff0c;背景知识 2&#xff0c;gcc 如何完成 1&#xff0c;预处理(进行宏替换) 2&#xff0c;编译&#xff08;生成汇编&#xff09; 3&#xff0c;汇编&#xff08;生成机器可识别代码&#xff09; 4&#xff0c;连接&#xff08;生成可执行文件或库文件&…

rk3588 usb网络共享连接

出门在外总会遇到傻 X 地方 没有能连接公网的 网口给香橙派连网 而我的香橙派5plus 没有wifi模块。。。话不多说 在手机上看一眼手机的mac地址&#xff0c; 在rk3588 上执行以下命令&#xff1a; sudo ifconfig usb0 down sudo ifconfig usb0 hw ether 58:F2:FC:5D:D4:7A //该m…