Linux CRC校验码
来源:互联网 发布:工业控制网络视频 编辑:程序博客网 时间:2024/06/07 06:30
1、CRC简介:
CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。CRC校验实用程序库在数据存储和数据通讯领域,为了保证数据的正确,就不得不采用检错的手段。
crc校验原理:
利用CRC进行检错的过程可简单描述为:在发送端根据要传送的k位二进制码列,以一定的规则产生一个校验用的r位监督码(CRC码),附在原始信息后边,构成一个新的二进制码序列数共k+r位,然后发送出去。在接收端,根据信息码和CRC码之间所遵循的规则进行检验,以确定传送中是否出错。这个规则,在差错控制理论中称为“生成多项式”。
2、生成CRC码的基本原理:
任意一个由二进制位串组成的代码都可以和一个系数仅为‘0’和‘1’取值的多项一一对应。例如:代码1010111对应的多项式为x6+x4+x2+x+1,而多项式为x5+x3+x2+x+1对应的代码101111。
3、CRC码集选择的原则:
若设码字长度为N,信息字段为K位,校验字段为R位(N=K+R),则对于CRC码集中的任一码字,存在且仅存在一个R次多项式g(x),使得V(x)=A(x)g(x)=xRm(x)+r(x);其中: m(x)为K次信息多项式, r(x)为R-1次校验多项式, g(x)称为生成多项式:g(x)=g0+g1x+ g2x2+...+g(R-1)x(R-1)+gRxR发送方通过指定的g(x)产生CRC码字,接收方则通过该g(x)来验证收到的CRC码字。
标准CRC生成多项式如下表:
名称 生成多项式 简记式* 标准引用
CRC-4 x4+x+1 3 ITU G.704
CRC-8 x8+x5+x4+1 0x31
CRC-8 x8+x2+x1+1 0x07
CRC-8 x8+x6+x4+x3+x2+x1 0x5E
CRC-12 x12+x11+x3+x+1 80F
CRC-16 x16+x15+x2+1 8005 IBM SDLC
CRC16-CCITT x16+x12+x5+1 1021 ISO HDLC, ITU X.25, V.34/V.41/V.42, PPP-FCS
CRC-32 x32+x26+x23+…+x2+x+1 04C11DB7 ZIP, RAR, IEEE 802 LAN/FDDI, IEEE 1394, PPP-FCS
CRC-32c x32+x28+x27+…+x8+x6+1 1EDC6F41 SCTP
基本算法(人工笔算):
以CRC16-CCITT为例进行说明,CRC校验码为16位,生成多项式17位。假如数据流为4字节:BYTE[3]、BYTE[2]、BYTE[1]、BYTE[0];
数据流左移16位,相当于扩大256×256倍,再除以生成多项式0x11021,做不借位的除法运算(相当于按位异或),所得的余数就是CRC校验码。
发送时的数据流为6字节:BYTE[3]、BYTE[2]、BYTE[1]、BYTE[0]、CRC[1]、CRC[0];
举例:
信息字段代码为: m(x)=x6+x4+x3+1 代码为:1011001生成多项式: g(x)=x4+x3+1 代码为:11001m(x)x4=x10+x8+x7+x4 对应的代码记为:10110010000 即 左移4位m(x)x4 在与 g(x)进行 模2的除法运算,相当于按位异或,计算过程如下:1 0 1 1 0 0 1 0 0 0 01 1 0 0 1-----------------------------0 1 1 1 1 0 1 0 0 0 01 1 0 0 1-----------------------------0 0 0 1 1 1 1 0 0 0 0 1 1 0 0 1----------------------------- 0 0 1 1 1 0 0 0 1 1 0 0 1----------------------------- 0 0 1 0 1 0 --------------> 余数 即 校验码发送数据码为: 10110011010
- Linux CRC校验码
- CRC校验码
- CRC校验码
- CRC校验码
- CRC校验码
- CRC校验码
- CRC校验码
- 实现CRC校验码
- CRC循环冗余校验码
- CRC循环冗余校验码
- java实现CRC校验码
- CRC计算校验码过程
- CRC校验码的源代码
- 如何计算CRC校验码
- CRC循环冗余校验码
- CRC循环冗余校验码
- 循环冗余校验码CRC
- 循环冗余校验码(CRC)
- python爬数据小试牛刀--beautifulSoup使用
- 关于js对象键顺序的更改
- 通俗理解KMP字符串匹配算法
- 494. Target Sum
- Java并发编程(三)——线程的状态
- Linux CRC校验码
- 用c++简单的封装线程c中互斥锁
- PAT (Advanced Level) Practise 1120 Friend Numbers (20)
- C# ACCESS数据库操作类
- POJ2348 UVa10368 HDU1525 Euclid's Game【博弈】
- 144. Binary Tree Preorder Traversal
- Counting Bits
- linux --学习1
- ACache源码分析