1.crc校验码的验源公式是什么?
2.CRC校验的原理是什么?
3.CRC校验码是怎样得到的?
4.什么是CRC校验码?有何注意事项?
5.循环冗余校验码例子
6.CRC16校验算法源码(易语言)
crc校验码的公式是什么?
由g(x)=x4+x3+x+1得到然后报文
补4个零得到
与做模2
运算crc冗余码=
扩展资料
利用CRC进行检错的过程可简单描述为:在发送端根据要传送的k位二进制码序列,以一定的验源规则产生一个校验用的r位监督码(CRC码),附在原始信息后边,验源构成一个新的验源二进制码序列数共k+r位,然后发送出去。验源
在接收端,验源什么是源码代码根据信息码和CRC码之间所遵循的验源规则进行检验,以确定传送中是验源否出错。这个规则,验源在差错控制理论中称为“生成多项式”。验源
CRC校验的验源原理是什么?
1、将X的验源最高次幂为R的生成多项式G(X)转换成对应的R+1位二进制数.
2、将信息码左移R位,验源解释源码相当于对应的信息多项式C(X)*2R.
3、用生成多项式(二进制数)对信息码做除,验源得到R位的余数.
4、将余数拼到信息码左移后空出的验源位置,得到完整的CRC码.
例假设使用的生成多项式是G(X)=X3+X+1.4位的原始报文为,求编码后的报文.
1、将生成多项式G(X)=X3+X+1转换成对应的二进制除数.
2、此题生成多项式有4位(R+1)(注意:4位的生成多项式计算所得的校验码为3位,R为校验码位数),要把原始报文C(X)左移3(R)位变成
3、用生成多项式对应的二进制数对左移3位后的原始报文进行模2除(高位对齐),相当于按位异或:
------------------
------------------
得到的余位,所以最终编码为:
* CRC.C——CRC程序库 */
#define CRCCCITT 0x
#define CCITT-REV 0x
#define CRC 0x
#define CRC-REV 0xA
#define CRC-POLYNOMIAL 0xEDBL
/* 以上为CRC除数的定义 */
#define NIL 0
#define crcupdate(d,a,t)*(a)=(*(a)8)^(d)];
#define crcupdate(d,a,t)*(a)=(*(a)>>8^(t)[(*(a)^(d))&0xff])
/* 以上两个宏可以代替函数crcupdate和crcrevupdate */
#include#include#include/* 函数crchware是传统的CRC算法,其返回值即CRC值 */unsigned short crchware(data,genpoly,accum)
unsigned short data;/* 输入的数据 */
unsigned short genpoly;/* CRC除数 */
unsigned short accum;/* CRC累加器值 */
{
static int i;
data
CRC校验码是怎样得到的?
CRC码一般在k位信息位之后拼接r位校验位生成。选择产生多项式为,把4位有效信息编程CRC码.即G(X)=X^3+X+1=,M(x)=X^3+X^2=。
(1)将待编码的k位信息表示成多项式M(x)。得到M(X)=,即M(x)=X^3+X^2=
(2)将M(x)左移r位,得到M(x)*xr。ovsdb源码则取r=3M(X)*X^3=X^6+X^5=
(3)用r+1位的生成多项式G(x)去除M(x)*xr得到余数R(x)。则被除数为,除数为,进行二进制除法,求得余数为。
(4)将M(x)*xr与R(x)作模2加,得到CRC码。则CRC校验码为
扩展资料:
凡设有校验码的代码,是由本体码与校验码两部分组成(如组织机构代码),本体码是表示编码对象的号码,校验码则是附加在本体码后边,用来校验本体码在输入过程中准确性的ua 源码号码。每一个本体码只能有一个校验码,校验码通过规定的数学关系得到。
系统内部预先设置根据校验方法所导出的校验公式编制成的校验程序,当带有校验码的代码输入系统时,系统利用校验程序对输入的本体码进行运算得出校验结果之后,再将校验结果与输入代码的校验码进行对比来检测输入的正确与否。如果两者一致,则表明代码输入正确,系统允许进入,如果不一致,则表明代码输入有误,系统拒绝进入,优雅源码并要求代码重新输入。
百度百科-校验码
什么是CRC校验码?有何注意事项?
1、循环校验码(CRC码):是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。2、生成CRC码的基本原理:任意一个由二进制位串组成的代码都可以和一个系数仅为‘0’和‘1’取值的多项式一一对应。
例如:代码对应的多项式为x6+x4+x2+x+1,而多项式为x5+x3+x2+x+1对应的代码。
扩展资料:
注意事项
是接受方和发送方的一个约定,也就是一个二进制数,在整个传输过程中,这个数始终保持不变。
在发送方,利用生成多项式对信息多项式做模2除生成校验码。在接收方利用生成多项式对收到的编码多项式做模2除检测和确定错误位置。
应满足以下条件:
1、生成多项式的最高位和最低位必须为1。
2、当被传送信息(CRC码)任何一位发生错误时,被生成多项式做除后应该使余数不为0。
3、不同位发生错误时,应该使余数不同。
4、对余数继续做除,应使余数循环。
循环冗余校验码例子
循环冗余校验码(CRC)是一种错误检测编码方法,用于确保数据传输的完整性。下面,通过一个具体的例子来解释CRC的计算过程。例如,当g(x) = x4 + x3 + x2 + 1时,这是一个(7,3)码,其中信息码为。 首先,理解g(x) = x4 + x3 + x2 + 1的表示方式:从右往左数,x4表示第五位是1,因为没有x1项,所以第二位是0。这意味着g(x)的多项式形式可以表示为:x4 + x3 + x2 + 1。 接着,设定a = ,b = 。这里的a代表信息码(),而b代表生成多项式(g(x)),目的是使用b去除以a进行模2运算,从而得到余数。 进行模2运算,将b()除以a(),得到的余数为。这是CRC码的计算结果。 最后,将得到的CRC码附加到信息码的末尾,形成传输码,。当数据在传输过程中被接收时,接收方可以通过计算CRC码来检测数据是否完整,从而确保数据传输的准确性。扩展资料
接收方如何检查收到的信息有无错误(一个简单通俗的模型) 首先接收方和发送方约定一个“生成多项式”g(x);CRC校验算法源码(易语言)
CRC校验算法源码在易语言中的实现如下:
版本 2
子程序 _CRC校验计算, 参数 预校验内容, 预校验内容为字节型数组
局部变量 crc, 用于存储校验值,初始值为 "2"
局部变量 返回数据, 用于存储最终的校验值,类型为整数型
局部变量 j, 用于数组索引,类型为整数型
局部变量 被校验内容, 用于存储数组中的每个字节,类型为字节型
局部变量 i, 用于循环计数,类型为整数型
局部变量 CY, 用于判断当前位是否为1,类型为整数型
局部变量 crc高位, 用于存储高位校验值,类型为文本型
局部变量 crc低位, 用于存储低位校验值,类型为文本型
初始化crc为 { , }
计次循环首 (取数组成员数 (预校验内容), j)
被校验内容 = 预校验内容 [j]
crc [2] = 位异或 (被校验内容, crc [2])
计次循环首 (8, i)
CY = 位与 (crc [2], 1) ' 检查CRC[2]与1有没有共同位
如果 (CY = 1) ' 如果CRC[2]与1有共同位
crc [2] = 右移 (crc [2], 1) ' 低位右移一位
如果真 (位与 (crc [1], 1) = 1) ' 如果校验高位与1有共同位
crc [2] = 位或 (crc [2], ) ' 给crc低位最高位补1
如果真结束
crc [1] = 右移 (crc [1], 1) ' crc高位右移一位
crc [2] = 位异或 (crc [2], 1) ' CRC低位与生成多项式0XA求异或
crc [1] = 位异或 (crc [1], ) ' CRC高位与生成多项式0XA求异或
否则
crc [2] = 右移 (crc [2], 1) ' 低为右移一位
如果真 (位与 (crc [1], 1) = 1) ' 如果校验高位与1有共同位
crc [2] = 位或 (crc [2], ) ' 给crc低位最高位补1
如果真结束
crc [1] = 右移 (crc [1], 1) ' 高位右移1位
否则结束
计次循环尾 ()
计次循环尾 ()
如果真 (取文本长度 (到文本 (crc [1])) = 1)
crc高位 = “” + 到文本 (crc [1])
如果真结束
如果真 (取文本长度 (到文本 (crc [1])) = 2)
crc高位 = “0” + 到文本 (crc [1])
如果真结束
如果真 (取文本长度 (到文本 (crc [1])) = 3)
crc高位 = 到文本 (crc [1])
如果真结束
如果真 (取文本长度 (到文本 (crc [2])) = 1)
crc低位 = “” + 到文本 (crc [2])
如果真结束
如果真 (取文本长度 (到文本 (crc [2])) = 2)
crc低位 = “0” + 到文本 (crc [2])
如果真结束
如果真 (取文本长度 (到文本 (crc [2])) = 3)
crc低位 = 到文本 (crc [2])
如果真结束
返回 (crc高位 + crc低位)