CRC循环校验码
为了防止数据在传输的时候丢失或被篡改,有了各种校验码。
每种CRC校验都有自己的多项式。每个多项式都有唯一对应的二进制。
CRC16就如果名字一样,校验码就是16位的 如果CRC32就是32位的。
原理就是 用一个数字(数据的二进制)去除一个特定的数字(多项式对应的二进制) 得到的余数就是CRC码。
检验的时候吧余数加入到原来的二进制中,若可以除的尽,则数据没有丢失。
下面是获取一个二进制数据的CRC16校验码的代码:
- private static void getCRC16(byte[] message, ref byte[] crc16)
- {
- ushort crcFull = 0xffff; //寄存器初始化
- byte crcHigh = 0xff, crclow = 0xff;
- char crclast;
- for (int i = 0; i < message.Length; i++) //把每一个字节都跑一次
- {
- crcFull = (ushort)(crcFull ^ message[i]); //用来和寄存器的数组异或一下
- for (int j = 0; j < 8; j++)
- {
- crclast = (char)(crcFull & 0x0001); //把每次最后一位保存下来
- crcFull = (ushort)((crcFull >> 1) & 0x7fff); //把最后一位排出去
- if (crclast == 1) //如果排除出去的是1 那么就要进行异或了
- crcFull ^= 0xA001;
- }
- }
- crc16[1] = crcHigh &= (byte)(crcFull >> 8); //获取高八位的二进制
- crc16[0] = crclow &= (byte)crcFull; //低八位
- }
校验:
- private static bool judgeCRC16(byte[] message)
- {
- ushort crcFull = 0xffff;
- char crclast;
- for(int i=0;i<message.Length;i++)
- {
- crcFull = (ushort)(crcFull ^ message[i]);
- for(int j=0;j<8;j++)
- {
- crclast =(char) (crcFull & 0x0001);
- crcFull = (ushort)((crcFull >> 1) & 0x7fff);
- if (crclast == 1)
- crcFull ^= 0xA001;
- }
- }
- //if (crcFull == 0) //0x0012>>8 = 0x0000
- // return true;
- //else
- // return false;
- return (crcFull == 0);
- }
水平有限,不服打我。
CRC循环校验码的更多相关文章
- CRC校验码原理、实例、手动计算
目录一.CRC16实现代码二.CRC32编码字符表三.CRC校验码的手动计算示例四.CRC校验原理五.CRC的生成多项式参考 一.CRC16实现代码 思路:取一个字符(8bit),逐位检查该字符,如果 ...
- CRC校验码
循环冗余校验码(CRC)的基本原理是:在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码也叫(N,K)码.对于一个给定的(N,K)码,可以证明存在一个最高次幂为R的多项式G(x)(R ...
- 常用校验码(奇偶校验码、海明校验码、CRC校验码)
一.奇偶校验码 二.海明校验码 三.CRC校验码 计算机系统运行时,各个部之间要进行数据交换.交换的过程中,会有发生误码的可能(即0变成1或1变成0),由于计算机的储存是通过二进制代码来实现的的, ...
- Modbus RTU CRC校验码计算方法
在CRC计算时只用8个数据位,起始位及停止位,如有奇偶校验位也包括奇偶校验位,都不参与CRC计算. CRC计算方法是: 1. 加载一值为0XFFFF的16位寄存器,此寄存器为CRC寄存器. 2. ...
- Modbus协议 CRC 校验码
CRC(循环冗余校验)在线计算 http://www.ip33.com/crc.html 里面的8005的多项式值,但网上看到的算法都是用A001来异或的 ---------------------- ...
- hadoop-hdfs体系结构
HDFS作为Hadoop的核心技术之一,HDFS(Hadoop Distributed File System, Hadoop分布式文件系统)是分布式计算中数据存储管理的基础.具有高容错高可靠性.高可 ...
- Hadoop之HDFS读写原理
一.HDFS基本概念 HDFS全称是Hadoop Distributed System.HDFS是为以流的方式存取大文件而设计的.适用于几百MB,GB以及TB,并写一次读多次的场合.而对于低延时数据访 ...
- 校验码(海明校验,CRC冗余校验,奇偶校验)
循环冗余校验码 CRC码利用生成多项式为k个数据位产生r个校验位进行编码,其编码长度为n=k+r所以又称 (n,k)码. CRC码广泛应用于数据通信领域和磁介质存储系统中. CRC理论非常复杂,一般书 ...
- CRC(Cyclic Redundancy Check)循环冗余校验码与海明码的计算题
(17)采用CRC进行差错校验,生成多项式为G(X)=X4+X+1,信息码字为10111,则计算出的CRC校验码是 (17) .A.0000 B.0100 C.0010 D.1100试题 ...
随机推荐
- 【枚举+数学】【HDU1271】整数对 难度:五颗星
整数对 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submis ...
- mysq优化
MySQL调优可以从几个方面来做:1. 架构层:做从库,实现读写分离: 2.系统层次:增加内存:给磁盘做raid0或者raid5以增加磁盘的读写速度:可以重新挂载磁盘,并加上noatime参数,这样可 ...
- httpwatch 9.3怎么在ie 8上看不到
首先,确认HttpWatch Basic加载项是否启动:打开IE,单击工具图标并选择管理加载项.确认HttpWatch Basic的状态是已启用,点击关闭.之后打开某个网页,在页面空白处右击选择Htt ...
- 如何合并相同数据并转置(mysql)实现
上次参加天猫大数据竞赛 是预测用户会买哪些牌子给用户推荐 拥有的字段 user_id,brand_id 最后要转成如下格式,比如用户1,要给他推荐2,3,4号品牌 原来的数据是 user_id,bra ...
- ubuntu python PyCharm virtualenv
1.安装virtualenv 参照:http://docs.jinkan.org/docs/flask/installation.html 2.PyCharm结合virtualenv开发应用 PyCh ...
- iOS中通知的添加和移除
我们都知道viewWillAppear:方法是在控制器的view将要显示的时候调用的,而viewWillDisappear:方法是在控制器的view将要隐藏的时候调用.很多时候我们根据自身需要将相关代 ...
- (重要) html概念之 input:name与id详解
实例: 带有两个文本字段和一个提交按钮的 HTML 表单: <form action="form_action.asp" method="get"> ...
- [转]C++实现系统服务暂停、停止、启动
/* 名称:系统服务管理 语言:C++ 介绍:对Windows系统服务的状态获取,服务暂停,开启,停止操作代码 */ void CStartServiceDlg::OnBnClickedButton1 ...
- MYSQL分页存储过程及事务处理--转自peace
MYSQL的分页过程,和事务处理的一个测试过程. /* --名称:MYSQL版查询分页存储过程 by peace 2013-8-14 --输入参数:@fields -- 要查询的字段用逗号隔开 --输 ...
- RMAN之一:快速入门
1.数据导出基础 (1)创建datapump导出文件的目录对象并为相应用户授予权限. 出于安全考虑,不允许oracle用户直接在OS上进行文件的操作,而应通过directory对象指定. SQL> ...