欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

golang標準庫crc32的使用樣例

 更新時間:2024年03月28日 10:24:18   作者:MCMAXMM  
根據(jù)實驗我們知道crc32算法比md5算法快4倍左右,所以研究了下golang的crc32使用,這篇文章主要給大家介紹了關于golang標準庫crc32使用的相關資料,需要的朋友可以參考下

1.概述

crc32實現(xiàn)了32位循環(huán)冗余檢測算法的實現(xiàn)。目前crc32內(nèi)部提供 了三種常用的多項式,采用查表法來提高計算checksum的效率。通過crc32.MakeTable()可以獲取對應的表,crc32提供了一個IEETABLE可以直接使用,官方鏈接如下:crc32 package - hash/crc32 - Go Packages

 圖1 多項式對應常量

2.API簡介

表1 crc32對外暴露函數(shù)

函數(shù)名稱參數(shù)返回值簡介
Checksum

data:[]byte

tab:*crc.Table

checksum:uint32輸入計算校驗和的原始數(shù)據(jù)和校驗方式,獲取校驗和。
ChecksumIEEEdata:[]bytechecksum:uint32輸入計算校驗和的原始數(shù)據(jù),使用IEEE多項式獲取校驗和。
Newtab:*crc.Tablehash.Hash32獲取特定校驗方式的hash,后續(xù)調(diào)用Sum即可獲取校驗和
NewIEEEhash.Hash32獲取IEEE方式的hash,后續(xù)調(diào)用Sum即可獲取校驗和
Update

crc:uint32

tab:*crc.Table

p:[]byte

checksum:uint32適用于流式數(shù)據(jù),繼續(xù)追加數(shù)據(jù)計算校驗和

     官方對外暴漏了5個函數(shù),hash和Update這兩種方式支持追加數(shù)據(jù)。

3.使用樣例

package main

import (
	"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()
	//此處可以一直追加數(shù)據(jù)
	_, err = i3eHash.Write(originalData)
	if err != nil {
		panic(err)
	}
	i3eCheckSum3 := i3eHash.Sum32()
	fmt.Println("ieee checksum is: ", i3eCheckSum3)

	newData := []byte("你好,世界")
	//采用update追加數(shù)據(jù)(適用于計算之后再追加數(shù)據(jù)的場景)
	newCheckSum1 := crc32.Update(i3eCheckSum1, crc32.IEEETable, newData)
	//直接追加數(shù)據(jù)之后再計算
	newCheckSum2 := crc32.ChecksumIEEE(append(originalData, newData...))
	fmt.Println(newCheckSum1, newCheckSum2)

}

總結 

到此這篇關于golang標準庫crc32使用的文章就介紹到這了,更多相關golang標準庫crc32使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • go語言更高精度的Sleep實例解析

    go語言更高精度的Sleep實例解析

    這篇文章主要為大家介紹了go語言更高精度的Sleep實例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • GoFrame框架ORM原生方法對象操作開箱體驗

    GoFrame框架ORM原生方法對象操作開箱體驗

    這篇文章主要為大家介紹了GoFrame框架ORM原生方法對象操作的開箱體驗,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • Go語言中l(wèi)og日志庫的介紹

    Go語言中l(wèi)og日志庫的介紹

    本文給大家介紹Go語言中l(wèi)og日志庫的概念使用技巧,log包定義了Logger類型,該類型提供了一些格式化輸出的方法,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2021-10-10
  • go使用makefile腳本編譯應用的方法小結

    go使用makefile腳本編譯應用的方法小結

    makefile可以看作是make工具的腳本文件, 而make主要用來處理一系列命令。常用的比如用來編譯和打包文件, 在C/C++的編譯打包中應用最廣泛了,這篇文章主要介紹了go使用makefile腳本編譯應用,需要的朋友可以參考下
    2022-08-08
  • 一文詳解go中如何實現(xiàn)定時任務

    一文詳解go中如何實現(xiàn)定時任務

    定時任務是指按照預定的時間間隔或特定時間點自動執(zhí)行的計劃任務或操作,這篇文章主要為大家詳細介紹了go中是如何實現(xiàn)定時任務的,感興趣的可以了解下
    2023-11-11
  • go語言中的協(xié)程詳解

    go語言中的協(xié)程詳解

    本文詳細講解了go語言中的協(xié)程,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • golang文件內(nèi)容覆蓋問題的分析及解決

    golang文件內(nèi)容覆蓋問題的分析及解決

    通過golang讀取數(shù)據(jù)庫站點映射配置,生成nginx conf文件,并檢查和重啟nginx服務,已達到站點自動化部署目的,當目標文件中內(nèi)容很長,而寫入的內(nèi)容很短時,目標文件內(nèi)容無法完全覆蓋,本文給大家介紹了解決方法,需要的朋友可以參考下
    2024-01-01
  • Gotify搭建你的消息推送系統(tǒng)

    Gotify搭建你的消息推送系統(tǒng)

    這篇文章主要介紹了Gotify搭建你的消息推送系統(tǒng),今天要分享的是 gotify,是一個用 go 編寫的消息服務端,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2024-01-01
  • 關于golang利用channel和goroutine完成統(tǒng)計素數(shù)的思路

    關于golang利用channel和goroutine完成統(tǒng)計素數(shù)的思路

    這篇文章主要介紹了golang利用channel和goroutine完成統(tǒng)計素數(shù)的思路詳解,通過思路圖分析及實例代碼相結合給大家介紹的非常詳細,需要的朋友可以參考下
    2021-08-08
  • 一文掌握gorm簡介及如何使用gorm

    一文掌握gorm簡介及如何使用gorm

    Gorm是一款用于Golang的ORM框架,它提供了豐富的功能,包括模型定義、數(shù)據(jù)驗證、關聯(lián)查詢等,下面通過本文掌握gorm簡介及使用方法,需要的朋友可以參考下
    2024-02-02

最新評論