crc校验方法,用c语言实现源代码(CRC checksum method, using C language source code)

crc校验方法,用c语言实现源代码(CRC checksum method, using C language source code)

CRC (Cyclic Redundancy Check) 校验应用较为广泛, 以前为了处理简单, 在程序中大多数采用lrc (longitudinal Redundancy Check) 校验, lrc校验很好理解, 编程实现简单.用了一天时间研究了crc的c语言实现, 理解和掌握了基本原理和c语言编程.结合自己的理解简单写下来.

1、crc简介

Crc检验的基本思想是利用线性编码理论, 在发送端根据要传送的k位二进制码序列, 以一定的规则产生一个检验码r位 (就是crc码), 附在信息后面, 构成一个新的二进制码序列数共 (K + R) 位, 最后发送出去.接收端根据同样的规则校验, 以确定传送中是否出错.接收端有两种处理方式: 1、计算k位序列的crc码, 与接收到的crc比较, 一致则接收正确.2、计算整个k + r位的crc码, 若为0, 则接收正确.

Crc码有多种检验位数, 8位、16位、32位等, 原理相同.16位的crc码产生的规则是先将要发送的二进制序列数左移16位 (即乘以2的16次方后), 除以一个多项式, 最后所得到的余数就是crc码.

求crc码所采用的是模2运算法则, 即多项式除法中采用不带借位的减法运算, 运算等同于异或运算.这一点要仔细理解, 是编程的基础.

CRC - 16: (美国二进制同步系统中采用) G (X) = x16 + x15 + x2 + 1

CRC CCITT: (由欧洲ccitt推荐) G (X) = x16 + X12 + X5 + 1

CRC - 32: G (X) = + x22 + x32 + x26 X23 + x16 + X12 + X11 + X10 + x8 + X5 + X4 + + X7 x1 + x2 + 1

2、按位计算crc

采用crc - ccitt多项式, 多项式为0x11021, c语言编程时, 参与计算为0x1021, 这个地方得深入思考才能体会其中的奥妙, 分享一下我的思路: 当按位计算crc时, 例如计算二进制序列为1001 1010 1010 1111时, 将二进制序列数左移16位, 即为1001 1010 1010 (1111 0000 0000 0000 0000 0000 0000 0000), 实际上该二进制序列可拆分为1000 (0000 0000 0000 0000 0000 0000 0000 (000) + 0000 0000 0000 0000 0000 0000 0000 (00) + 0000 0000 0000 1 0000 0000 0000 0000) + (0000 0000 0000 0000 +......)

现在开始分析运算:

< 1 > 对第一个二进制分序列求余数, 竖式除法即为0x10000 ^ 0x11021运算, 后面的0位保留;

< 2 > 接着对第二个二进制分序列求余数, 将第一步运算的余数 * 2后再和第二个二进制分序列一起对0x11021求余, 这一步理解应该没什么问题.如果该分序列为0, 无需计算.

对其余的二进制序列求余与上面两步相同 < 3 >.

< 4 > 计算到最后一位时即为整个二进制序列的余数, 即为crc校验码.

该计算方法相当于对每一位计算,

The operation process is easy to understand and accounts for less memory. The disadvantage is that one bit computing is time-consuming.

C language implementation is given below:

Copy the code code as follows:

Unsigned, char, test[16] = {0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xaa, 0xbb, 0xCC, 0xdd, 0xEE, 0xff};

Unsigned char len = 16;

Void main (void)

{

Unsigned long temp = 0;

Unsigned int crc;

Unsigned char i;

Unsigned, char, *ptr = test;

While (len--) {

For (I = 0x80, I = 0, I = I, 1) {

Temp = temp * 2;

If ((temp & 0x10000) = = 0)

Temp

c语言 checksum,crc校验方法,用c语言实现源代码(CRC checksum method, using C language source code).doc...相关推荐

  1. 一文详解循环冗余校验校验算法(CRC校验)及C语言代码的实现 ---- 以CRC-16/MODBUS为例讲解

    一.概述 现在的产品开发过程中,无论是数据的储存还是传输,都需要确保数据的准确性,所以就需要在数据帧后面附加一串校验码,方便接收方使用校验码校验接收到的数据是否是正确的. 常用的校验方式有奇偶校验.异 ...

  2. 编写一个字节数的rtu C语言校验程序,Modbus通信协议中CRC校验的快速C语言算法

    Modbus通信协议中CRC校验的快速C语言算法 2004年第11期 福 建 电 脑 63 Modbus通信协议中CRC校验的快速C语言算法 孟开元 (西安石油大学计算机学院陕西西安710065) [ ...

  3. can协议crc计算_CAN总线通信的CRC校验方法

    数据校验是为保证数据的完整性进行的一种验证操作.CAN通信采用CRC校验作为一种重要的错误检测手段,是节点判断CAN帧信息的完整性并产生确认应答的依据. 在现场总线通信和控制的实际应用中,工业应用环境 ...

  4. c语言用CRC校验FCS序列,CRC校验原理与其C语言实现

    CRC校验码的基本思想是利用线性编码理论,在发送端根据要传送的k位二进制码序列,以一定的规则产生一个校验用的监督码(既CRC码)r位,并附在信息后边,构成一个新的二进制码序列数共(k+ r)位,最后发 ...

  5. crc 校验错误_资深工程师:图说CRC原理应用及STM32硬件CRC外设

    在嵌入式产品应用中,常常需要应对系统数据在存储或者传输过程中的完整性问题.所谓完整性是指数据在其生命周期中的准确性和一致性.这些数据可能存储在EEPROM/FLASH里,或者基于通信协议进行传输,它们 ...

  6. 核实c#语言教程,C#教程方法用法 _C#语言-w3school教程

    C#语言 的 C#教程 本教程是为C#的初学者和专业人士而设计的,提供有关C#的基本和高级概念. C#是.Net框架的编程语言. 我们的C#教程包括C#的所有主题,例如第一个C#示例程序,控制语句,对 ...

  7. c语言调用函数的方法案例,C语言经典例题100例——C语言练习实例34解答(函数调用)...

    题目:练习函数调用. 程序分析:无. 程序源代码: // 百宝箱工作室 官方网址 http://www.baibaox.com // 百宝箱工作室业务介绍 http://www.baibaox.com ...

  8. c语言用递归的方法插入排序,c语言,递归法的选择排序。为什么运行出错。。。求赐教...

    满意答案 diexun2011 2016.01.16 采纳率:49%    等级:12 已帮助:12974人 没太看懂楼主原来的意思,在原来代码的基础上修改 #include void exchang ...

  9. CRC校验及C语言实现

    摘自:CRC校验原理及其C语言实现 地址:https://blog.csdn.net/whik1194/article/details/108837493?spm=1001.2014.3001.550 ...

最新文章

  1. 【驱动】在内核源码中添加驱动程序
  2. 【vue】vue中ref用法
  3. Android 解读Event和Main Log
  4. 设置select默认值
  5. Window 7 下的某些服务不能随便禁用! 无法立即删除.exe文件,因为禁用了Application Experience服务。...
  6. 【智能车Code review】——小S与中S道路判断
  7. linux sql 语句菜鸟,Linux安装mysql
  8. Linux下oracle em安装,关于在linux下手动安装oracle之后,安装em的问题
  9. cad细等线体不显示_CAD技法大全,如何在CAD中解决好部分图元无法正常显示的问题 ?...
  10. 【名额有限】腾讯技术工程-运维技术沙龙
  11. pads9.5在win10中选项字体显示不全问题解决补丁下载(网盘免费下载)
  12. js 原生 导出 excel
  13. python画圣诞帽_用Python给头像加上圣诞帽,新手必学
  14. 2020年第十一届C/C++ B组第一场蓝桥杯省赛真题
  15. 10道字节跳动C++/Java笔试真题你能做对几道?3道就赢了80%的竞争者(含答案)
  16. 手机抢红包助手深陷作弊指责 部分外挂植入木马
  17. python xls 转化 xlsx
  18. Java例:查询自己的星座
  19. 如何减小Ubuntu 16.04系统下VMware虚拟机硬盘空间占用过大问题
  20. 向公司爱康宣传栏投稿:回顾过去,展望未来

热门文章

  1. web打印,使用lodop实现打印和导出emf图以及生成word。
  2. 概论第2章__随机变量及其概率分布__泊松定理和泊松分布
  3. 【实战】使用Java结合Sendmail邮件服务器+Quartz开源框架定时发邮件
  4. html让视频跟图片之间无缝,如何做到两个视频之间自然无缝衔接
  5. 【滤波】卡尔曼滤波数学
  6. (20190415)英文论文参考文献之外国作者(名+姓)
  7. Spring Boot 要怎么学?要学哪些东西?要不要先学 SSM?松哥说说看法
  8. 猎魂觉醒能在电脑上玩吗?猎魂觉醒PC安卓模拟器版教程
  9. 产品研发过程常见问题3:跨部门协作困难
  10. 做PPT必备的大数据分析网站,好看又免费的报表工具