golang实现CRC8算法

CRC校验查表法详解 CRC校验的查表法理解算法原理基础计算查表法原理及计算查表法中的表CRC校验中数据逆序CRC校验中的其它参数 算法原理 CRC(Cyclic Redundance Check)循环冗余校验,是基于某个多项式计算出一组校验码,用于核对数据传输过程中是否被更改或传输错误 基础计算 假设需要检验的数据 g :10100111,这串二进制码可以表示为代数多项式g(x) = x^7 + x^5 + x^2 + x +1, 而作为除数的多项式 h(x) 可以自由选择或者按照国际标准选择,一般h(x)的阶数如果是m 阅读详情

CRC校验算法,就是把需要校验的数据与多项式进行循环异或(XOR),但进行异或的方式与实际中数据传输时,是高位先传、还是低位先传有关。对于数据高位先传的方式,异或从数据的高位开始,我们暂且称它顺序异或;对于数据低位先传的方式,异或从数据的低位开始,我们就叫它反序异或。

 

本文基于表达式x^8+x^5+x^4+x^0

一、顺序异或

  1.通过计算获取crc8

//x^8+x^5+x^4+x^0
func getcrc8High(buf []byte) (crc byte) {
	for  i := len(buf)-1 ; i   >=0  ; i--{
		crc ^= buf[i]
		for  j := 8 ; j > 0 ;j-- {
			if crc & 0x80 > 0 {
				crc = ( crc << 1 ) ^ 0x31
			}else {
				crc = crc << 1
			}
		}
	}

	return
}

  2.查表法

var crc8Table = []byte{
	0x00, 0x31, 0x62, 0x53, 0xc4, 0xf5, 0xa6, 0x97, 0xb9, 0x88, 0xdb, 0xea, 0x7d, 0x4c, 0x1f, 0x2e,
	0x43, 0x72, 0x21, 0x10, 0x87, 0xb6, 0xe5, 0xd4, 0xfa, 0xcb, 0x98, 0xa9, 0x3e, 0x0f, 0x5c, 0x6d,
	0x86, 0xb7, 0xe4, 0xd5, 0x42, 0x73, 0x20, 0x11, 0x3f, 0x0e, 0x5d, 0x6c, 0xfb, 0xca, 0x99, 0xa8,
	0xc5, 0xf4, 0xa7, 0x96, 0x01, 0x30, 0x63, 0x52, 0x7c, 0x4d, 0x1e, 0x2f, 0xb8, 0x89, 0xda, 0xeb,
	0x3d, 0x0c, 0x5f, 0x6e, 0xf9, 0xc8, 0x9b, 0xaa, 0x84, 0xb5, 0xe6, 0xd7, 0x40, 0x71, 0x22, 0x13,
	0x7e, 0x4f, 0x1c, 0x2d, 0xba, 0x8b, 0xd8, 0xe9, 0xc7, 0xf6, 0xa5, 0x94, 0x03, 0x32, 0x61, 0x50,
	0xbb, 0x8a, 0xd9, 0xe8, 0x7f, 0x4e, 0x1d, 0x2c, 0x02, 0x33, 0x60, 0x51, 0xc6, 0xf7, 0xa4, 0x95,
	0xf8, 0xc9, 0x9a, 0xab, 0x3c, 0x0d, 0x5e, 0x6f, 0x41, 0x70, 0x23, 0x12, 0x85, 0xb4, 0xe7, 0xd6,
	0x7a, 0x4b, 0x18, 0x29, 0xbe, 0x8f, 0xdc, 0xed, 0xc3, 0xf2, 0xa1, 0x90, 0x07, 0x36, 0x65, 0x54,
	0x39, 0x08, 0x5b, 0x6a, 0xfd, 0xcc, 0x9f, 0xae, 0x80, 0xb1, 0xe2, 0xd3, 0x44, 0x75, 0x26, 0x17,
	0xfc, 0xcd, 0x9e, 0xaf, 0x38, 0x09, 0x5a, 0x6b, 0x45, 0x74, 0x27, 0x16, 0x81, 0xb0, 0xe3, 0xd2,
	0xbf, 0x8e, 0xdd, 0xec, 0x7b, 0x4a, 0x19, 0x28, 0x06, 0x37, 0x64, 0x55, 0xc2, 0xf3, 0xa0, 0x91,
	0x47, 0x76, 0x25, 0x14, 0x83, 0xb2, 0xe1, 0xd0, 0xfe, 0xcf, 0x9c, 0xad, 0x3a, 0x0b, 0x58, 0x69,
	0x04, 0x35, 0x66, 0x57, 0xc0, 0xf1, 0xa2, 0x93, 0xbd, 0x8c, 0xdf, 0xee, 0x79, 0x48, 0x1b, 0x2a,
	0xc1, 0xf0, 0xa3, 0x92, 0x05, 0x34, 0x67, 0x56, 0x78, 0x49, 0x1a, 0x2b, 0xbc, 0x8d, 0xde, 0xef,
	0x82, 0xb3, 0xe0, 0xd1, 0x46, 0x77, 0x24, 0x15, 0x3b, 0x0a, 0x59, 0x68, 0xff, 0xce, 0x9d, 0xac,
}


func getCRC8HighByTable(buf []byte) (val byte) {
	for  i := len(buf)-1 ; i  >= 0 ; i-- {
		val = crc8Table[(val^buf[i])&0xff]
	}
	return
}

   

二、反序异或

1.通过计算获取crc8

//x^8+x^5+x^4+x^0
func getcrc8(buf []byte) (crc byte) {
	for  i := 0 ; i   < len(buf)  ; i++ {
		crc ^= buf[i]
		for  j := 8 ; j > 0 ;j-- {
			if crc & 0x01 > 0 {
				crc = ( crc >> 1 ) ^ 0x8c
			}else {
				crc = crc >> 1
			}
		}
	}

	return
}

2. 查表法

  

//x^8+x^5+x^4+x^0
func getcrc8ByTable(buf []byte) (crc byte) {
	for  i := 0 ; i < len(buf) ; i++ {
		crc = crcTableMax[(crc^buf[i])&0xff]
	}
	return
}



var crcTableMax = []byte{
	0, 94, 188, 226, 97, 63, 221, 131, 194, 156, 126, 32, 163, 253, 31, 65,
	157, 195, 33, 127, 252, 162, 64, 30, 95, 1, 227, 189, 62, 96, 130, 220,
	35, 125, 159, 193, 66, 28, 254, 160, 225, 191, 93, 3, 128, 222, 60, 98,
	190, 224, 2, 92, 223, 129, 99, 61, 124, 34, 192, 158, 29, 67, 161, 255,
	70, 24, 250, 164, 39, 121, 155, 197, 132, 218, 56, 102, 229, 187, 89, 7,
	219, 133, 103, 57, 186, 228, 6, 88, 25, 71, 165, 251, 120, 38, 196, 154,
	101, 59, 217, 135, 4, 90, 184, 230, 167, 249, 27, 69, 198, 152, 122, 36,
	248, 166, 68, 26, 153, 199, 37, 123, 58, 100, 134, 216, 91, 5, 231, 185,
	140, 210, 48, 110, 237, 179, 81, 15, 78, 16, 242, 172, 47, 113, 147, 205,
	17, 79, 173, 243, 112, 46, 204, 146, 211, 141, 111, 49, 178, 236, 14, 80,
	175, 241, 19, 77, 206, 144, 114, 44, 109, 51, 209, 143, 12, 82, 176, 238,
	50, 108, 142, 208, 83, 13, 239, 177, 240, 174, 76, 18, 145, 207, 45, 115,
	202, 148, 118, 40, 171, 245, 23, 73, 8, 86, 180, 234, 105, 55, 213, 139,
	87, 9, 235, 181, 54, 104, 138, 212, 149, 203, 41, 119, 244, 170, 72, 22,
	233, 183, 85, 11, 136, 214, 52, 106, 43, 117, 151, 201, 74, 20, 246, 168,
	116, 42, 200, 150, 21, 75, 169, 247, 182, 232, 10, 84, 215, 137, 107, 53,
}

 

CDT 规约 crc8校验 查表法 Go版本代码 var auchCRCHi = []byte{ 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01... 阅读详情

相关推荐

循环冗余校验在Golang中的实现

在本文中,我们演示了如何在Golang中实现CRC校验算法,并给出了一个基于CRC32的具体实例。CRC校验在数据传输和存储中起着重要的作用,能够有效检测和纠正数据错误,保障数据的完整性和准确性。循环冗余校验(Cyclic Redundancy Check,简称CRC)是一种常用的数据校验方法,用于检测和纠正数据传输中的错误。在此篇文章中,我们将使用Golang演示如何实现CRC校验算法。在Golang中,我们可以使用计算机科学领域广泛应用的CRC32算法作为例子进行讲解。在这个函数中,我们首先使用。

syntax_bug609的博客 454

读取文件计算crc32

#include <iostream> #include <fstream> #include <cassert> #include <string> using namespace std; #include <cstring> #include <vector> #include <iomanip> ty...

axx的博客 2483

go-checksum:计算go.mod和模块目录的Golang模块校验和的简单工具

去校验和 计算go.mod和module directory Golang模块校验和的简单工具。 本自述文件还描述了Golang go.sum如何计算文件内容中的哈希值。 也许这是Golang go.sum如何从文件内容中获取哈希值的官方文档 用法 示例Golang模块 GitHub: : 示例版本:v1.4.0 校验和: : 克隆并签出版本 git clone https://github.com/gin-gonic/gin.git git checkout v1.4.0 安装go-checksum go get -u github.com/vikyd/go-checksum 计算go.mod校验和 go-checksum relOrAbsPathOfGinDir/go.mod 将打印如下: file: /Users/viky/tmp/gin/go.mod { "

golang crc校验 crc8 crc32 查表法

golang crc校验 crc8 crc32 查表法 package util import ( "math" ) var crc32tab = []uint32{ 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb88...

nihaoshamozhiying的博客 2957

基于Labview的S19文件自动分块和校验码生成

自动对S19文件不连续地址分块,内部数据校验,生成校验码,适合用于UDS协议刷写ECU前对S19文件的处理。

Ansys Maxwell磁场仿真入门:无线传能线圈自感与互感计算全流程

本文详细介绍了使用Ansys Maxwell进行无线充电线圈磁场仿真的全流程,包括模型建立、求解器设置、电感参数提取及优化策略。通过实战案例,帮助工程师掌握线圈自感与互感计算技巧,提升无线充电系统设计效率与精度。重点解析了Maxwell在磁场仿真中的关键应用,适用于电磁场仿真初学者和进阶用户。

weixin_29047545的博客 443

GitHub_Trending/go2/Go:CRC8校验和算法实现详解

在现代数字通信和存储系统中,数据完整性校验是确保信息传输准确性的关键技术。CRC(Cyclic Redundancy Check,循环冗余校验)作为一种高效的错误检测机制,被广泛应用于网络通信、存储设备、嵌入式系统等领域。本文将深入解析GitHub_Trending/go2/Go项目中CRC8校验和算法的实现原理、应用场景和最佳实践。 ## CRC8算法基础 ### 什么是CRC8校验和? ...

gitblog_01089的博客 703

团队管理中最棘手的6个问题

研发团队的管理棘手问题,大多集中在。

xiaolyuh的专栏 752

如何理解CRC8校验和算法:Go语言实现的终极完整指南

🚀 想要确保数据传输的完整性吗?CRC8校验和算法正是您需要的错误检测利器!本文将带您深入了解CRC8算法的原理,并展示如何使用Go语言高效实现这一关键技术。无论您是初学者还是经验丰富的开发者,这份完整指南都将帮助您掌握数据校验的核心技术。 ## 🔍 什么是CRC8校验和算法? CRC8(Cyclic Redundancy Check 8-bit)是一种**循环冗余校验算法**,专门用于检

gitblog_00454的博客 515

AI视频生成提示词工程:结构化公式与实战案例详解

在实际使用 AI 生成视频或图像时,最常遇到的困惑是:为什么我的提示词(Prompt)生成的画面总是不理想?是模型能力不足,还是我的描述有问题?答案往往是后者。提示词工程(Prompt Engineering)并非简单的“翻译”需求,而是一门需要结构化思维和精准描述的技能。它决定了 AI 能否准确理解你的意图,并生成符合预期的视觉内容。 本文将通过两个核心案例,深入拆解提示词的构建逻辑。第一个案例聚焦于“文生视频”,我们将学习如何将一个简单的想法,如“小猫在雪地里玩雪球”,通过结构化公式扩展为一段富有细节和

weixin_30800987的博客 565

OpenCL编译环境配置

在 Linux 系统上配置 OpenCL 开发环境需要安装适当的驱动、运行时和开发工具。

深之JohnChen的专栏 2003

GO、C#、Java实现CRC16同等算法

很多时候我们在做软件功能的时候不只使用一种程序设计语言,往往都是多种开发语言结合实现特定的需求。我讲述一下我在实现HJ212通信协议算法时用到的CRC16校验算法。

liuzhaolei107的博客 502

Ansys Zemax与Speos协同设计:HUD系统从光学优化到驾驶模拟的全流程解析

本文详细解析了如何利用Ansys Zemax与Speos这对“黄金搭档”进行HUD系统的协同设计。流程始于Zemax进行核心光学架构与像差优化,奠定性能基础;随后将设计无缝导入Speos,通过HUD光学分析模块进行量化验证;最终在虚拟驾驶环境中进行沉浸式模拟,评估实际视觉体验与系统集成效果,实现从光学优化到驾驶模拟的全流程闭环。

weixin_29201933的博客 274

如何降低redis哈希值冲突概率

【代码】如何降低redis哈希值冲突概率。

shao.bing的专栏 321

MFC IP Address Control 使用详解:从基础到高级应用

本文详细介绍了MFC中IPAddressControl控件的使用方法,包括基础创建、属性配置、样式自定义和高级功能实现。主要内容涵盖:控件初始化、默认IP设置、外观修改、派生类创建、消息处理、批量管理以及常见问题解决方案。通过示例代码展示了如何验证IP范围、优化性能和处理键盘输入等实用技巧,为开发网络应用程序提供了专业指导。文章还给出了多个备选标题,适合不同层次开发者参考使用。

专注现代C++实战,从核心语法到高性能编程,助力开发者深入掌握系统级编程精髓。 159

基于STM32的智能宠物喂食系统设计与实现(代码+PCB )

STM32;DHT11;本系统的软件程序基于Keil MDK-ARM V5集成开发环境进行编写和编译。Keil MDK是ARM公司官方推荐的嵌入式开发工具,支持ARM Cortex-M系列微控制器的程序开发,内置ARM C/C++编译器、调试器和仿真器,具有代码编辑、语法高亮、工程管理和在线调试等功能,是STM32开发领域应用最为广泛的IDE之一。

3254968421的博客 74

OptiScaler 完整使用指南:免费替换 DLSS/FSR/XeSS 超采样,为 DX12 游戏加帧生成

OptiScaler 是一款免费开源的游戏图形中间件。它拦截游戏发出的 DLSS、FSR、XeSS 超采样调用,把最终输出换成你指定的后端,还能为 DX12 单机游戏开启实验性帧生成。适合想用自己显卡合适超采样的玩家,以及想给游戏加插帧的人。 ## OptiScaler 使用场景:先判断你适不适合 **结论:OptiScaler 是超采样的"替换层",它自己不做新渲染,只决定最终由哪项技术执行

gitblog_00080的博客 355

AEJoy —— 最受欢迎的 5 个 Ae 表达方式

NOTE] 原文作者我意识到表达式可能令人生畏,有些人宁愿复制粘贴有用的代码,而不愿学习这门语言。对此我完全理解。因此,我想与您分享我的。这些是我几乎在每个项目中都会使用的表达式,我认为它们极大地提升了工作流程。

ShaderJoy 的兴趣技术杂货铺 366

Golang hash/crc32 库实战指南:从基础到优化

在本文中,我们深入探讨了Golang的hash/crc32标准库,从基础概念到实战技巧,再到错误处理与实际案例分析,全面覆盖了使用hash/crc32进行数据校验和优化的各个方面。通过本文,开发者应能够理解CRC32算法的重要性,掌握如何在Golang项目中有效利用hash/crc32库来提升数据的完整性和应用的性能。

walkskyer的博客 2137

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

【CRC】CRC推导(八)CRC64的各种实现

CRC64 算法实现与表格推导

beatfan的博客 4964

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

CRC-16/XMODEM校验算法C/Go实现,针对单片机优化了的

网站上的算法大都是查512字节表的,对单片机来讲,太浪费空间了。 根据网上资料,修改并测试通过以下算法: static const unsigned short crc16tab[] = { 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, }; /** * CRC-16/XMO...

kinshy的博客 1574

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

CRC-16/XMODEM校验算法C/Go实现

做的软件需要个单片机打交道,通讯走的TCP里面校验数据CRC了。3.C# 语言 CRC 计算 CRC-16/XMODEM。因为用到了不同语言,所以整理下这块的使用。

liangpz521的技术资料库 1054

Golang实战:深入hash/crc64标准库的应用与技巧

在深入了解hash/crc64之前,让我们首先理解CRC(循环冗余校验)的概念。CRC是一种根据数据生成短固定位数校验和的算法,广泛用于检测数据传输或存储过程中的错误。它通过特定的多项式函数计算数据的二进制序列,生成一个CRC值,以此来验证数据的完整性。Golang的hash/crc64包提供了CRC64的实现,支持两种标准的多项式:ISO和ECMA。这使得它在处理大量数据时既高效又可靠,是文件校验、网络数据验证等场景的理想选择。通过本文的介绍和讨论,我们深入探讨了Golang的hash/crc64。

walkskyer的博客 2147

基于CRC64的通用哈希表(HashMap)的实现(使用golang)

本文就现有哈希博文的两个典型问题进行解决,首先是使用泛型来支持任意类型,然后使用CRC64散列函数将任意二进制数据散列到64位整数再对数组长度取模。由于CRC64具有良好的散列性质,因此实现的哈希表不容易出现冲突。

学者的博客 2362

golang之crc32算法解密字符串

根据实验我们知道crc32算法比md5算法快4倍左右,所以研究了下golang的crc32的解密。 package main import ( "fmt" "hash/crc32" ) func main() { intValue :=getIntvalKey("Hello,World!") fmt.Print(intValue) } func getIntvalKey(strKe...

小白菜的专栏 1839

Grafana Mimir 依赖链中的 crc64nvme:NVME 多项式 CRC64 的 Go 实现与 SIMD 加速原理

crc64nvme 是 MinIO 团队开源的 Go 包,用于计算基于 NVM Express® 规范的 NVME 多项式 CRC64 校验和,并通过 carryless-multiplication(无进位乘法)配合 x86 与 ARM 平台的 SIMD 指令实现高速计算。本文围绕该包在 [Mimir 仓库](https://link.gitcode.com/i/640d8dba69eebf9b

gitblog_00107的博客 1070
上一篇: Golang基于consul实现服务注册与发现
下一篇: linux系统 too many open files解决方法
思维的深度
博客等级 码龄11年 2万+粉丝 391原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值