精华内容
下载资源
问答
  • 数据的十六进制:61 62 63 参数模型:CRC-16/CCITT-FALSE 宽度:16 多项式表达式:x16+x12+x5+1 多项式:1021 初始值:FFFF 结果异或值:00 输入数据反转:NO 输出数据反转:NO 校验结果:514A 将校验结果添加到...

    验证网址:

    http://www.ip33.com/crc.html

    CRC-16/CCITT-FALSE验证

    需要校验的数据:abc
    数据的十六进制:61 62 63
    参数模型:CRC-16/CCITT-FALSE
    宽度:16
    多项式表达式:x16+x12+x5+1
    多项式:1021
    初始值:FFFF
    结果异或值:00
    输入数据反转:NO
    输出数据反转:NO


    校验结果:514A


    将校验结果添加到校验的数据后面:61 62 63 51 4A,重新计算校验结果为0000.
    校验完成

    CRC-16/XMODEN验证

    需要校验的数据:abc
    数据的十六进制:61 62 63
    参数模型:CRC-16/XMODEN
    宽度:16
    多项式表达式:x16+x12+x5+1
    多项式:1021
    初始值:0000
    结果异或值:0000
    输入数据反转:NO
    输出数据反转:NO


    校验结果:9DD6


    将校验结果添加到校验的数据后面:61 62 63 9D D6,重新计算校验结果为0000.
    校验完成

    CRC-16/IBM验证

    需要校验的数据:abc
    数据的十六进制:61 62 63
    参数模型:CRC-16/IBM
    宽度:16
    多项式表达式:x16+x15+x2+1
    多项式:8005
    初始值:0000
    结果异或值:0000
    输入数据反转:YES
    输出数据反转:YES


    校验结果:9738


    将校验结果添加到校验的数据后面:61 62 63 97 38,重新计算校验结果为8C 3D,结果不对!
    将9738中两个字节前后交换,得到”3897“,添加在原始数据后面,得到61 62 63 38 97,重新计算校验结果为0000.
    校验完成。

    CRC-16/MAXIM验证

    需要校验的数据:abc
    数据的十六进制:61 62 63
    参数模型:CRC-16/MAXIM
    宽度:16
    多项式表达式:x16+x15+x2+1
    多项式:8005
    初始值:0000
    结果异或值:FFFF
    输入数据反转:YES
    输出数据反转:YES


    校验结果:68C7


    将校验结果添加到校验的数据后面:61 62 63 68 C7,重新计算校验结果为C3 C3,结果不对!
    将校验结果68C7与结果异或值:FFFF再次取异或,得到9738,也就是结果未取异或前的值。

    将9738中两个字节前后交换,得到”3897“,添加在原始数据后面,得到61 62 63 38 97,重新计算校验结果为FFFF。然后与结果异或值:FFFF进行异或,结果为000。
    校验完成。

    CRC-16/USB验证

    需要校验的数据:abc
    数据的十六进制:61 62 63
    参数模型:CRC-16/USB
    宽度:16
    多项式表达式:x16+x15+x2+1
    多项式:8005
    初始值:FFFF
    结果异或值:FFFF
    输入数据反转:YES
    输出数据反转:YES


    校验结果:A8B6


    将校验结果添加到校验的数据后面:61 62 63 A8 B6,重新计算校验结果为E7 77,结果不对!
    将校验结果A8B6与结果异或值:FFFF再次取异或,得到57 49,也就是结果未取异或前的值。

    将5749中两个字节前后交换,得到”49 57“,添加在原始数据后面,得到61 62 63 49 57,重新计算校验结果为FFFF。然后与结果异或值:FFFF进行异或,结果为000。
    校验完成。

    CRC-16/MODBUS验证

    需要校验的数据:abc
    数据的十六进制:61 62 63
    参数模型:CRC-16/MODBUS
    宽度:16
    多项式表达式:x16+x15+x2+1
    多项式:8005
    初始值:FFFF
    结果异或值:0000
    输入数据反转:YES
    输出数据反转:YES


    校验结果:5749


    将校验结果添加到校验的数据后面:61 62 63 57 49,重新计算校验结果为A8 89,结果不对!

    将5749中两个字节前后交换,得到”49 57“,添加在原始数据后面,得到61 62 63 49 57,重新计算校验结果为000。
    校验完成。

    CRC-16/CCITT验证

    需要校验的数据:abc
    数据的十六进制:61 62 63
    参数模型:CRC-16/CCITT
    宽度:16
    多项式表达式:x16+x15+x2+1
    多项式:8005
    初始值:FFFF
    结果异或值:0000
    输入数据反转:YES
    输出数据反转:YES


    校验结果:58E9


    将校验结果添加到校验的数据后面:61 62 63 58 E9,重新计算校验结果为87 B4,结果不对!

    将58E9中两个字节前后交换,得到”E9 58“,添加在原始数据后面,得到61 62 63 E9 58,重新计算校验结果为000。
    校验完成。

    CRC-16/X25验证

    需要校验的数据:abc
    数据的十六进制:61 62 63
    参数模型:CRC-16/X25
    宽度:16
    多项式表达式:x16+x15+x5+1
    多项式:1021
    初始值:FFFF
    结果异或值:FFFF
    输入数据反转:YES
    输出数据反转:YES


    校验结果:9E25


    将校验结果添加到校验的数据后面:61 62 63 9E 25,重新计算校验结果为DA D9,结果不对!

    将校验结果9E25与结果异或值:FFFF再次取异或,得到61 DA,也就是结果未取异或前的值。

    将61DA中两个字节前后交换,得到”DA 61“,添加在原始数据后面,得到61 62 63 DA 61,重新计算校验结果为FFFF。然后与结果异或值:FFFF进行异或,结果为000。
    校验完成。

    CRC-16/DNP验证

    需要校验的数据:abc
    数据的十六进制:61 62 63
    参数模型:CRC-16/X25
    宽度:16
    多项式表达式:x16+x13+x12+x11+x10+x8+x6+x5+x2+1
    多项式:3D65
    初始值:0000
    结果异或值:FFFF
    输入数据反转:YES
    输出数据反转:YES


    校验结果:E957


    将校验结果添加到校验的数据后面:61 62 63 E9 57,重新计算校验结果为9A 9A,结果不对!

    将校验结果E957与结果异或值:FFFF再次取异或,得到16A8,也就是结果未取异或前的值。

    将16A8中两个字节前后交换,得到”A816“,添加在原始数据后面,得到61 62 63 A8 16,重新计算校验结果为FFFF。然后与结果异或值:FFFF进行异或,结果为000。
    校验完成。

    展开全文
  • ModBus通讯,CRC校验码生成,Java版实现;ModBus,CRC,Java版实现
  • 校验码(循环冗余校验码)

    千次阅读 2020-09-24 21:05:41
    校验码(循环冗余校验码) 循环冗余校验码,又称CRC。它利用生成多项式来为k个数据位产生r个校验位来进行编码。其编码长度为k+r。

    校验码(循环冗余校验码)

    循环冗余校验码,又称CRC码。它利用生成多项式来为k个数据位产生r个校验位来进行编码。其编码长度为k+r。

    循环冗余校验码由两部分组成,左边为信息码(数据),右边为校验码,如下图
    循环冗余校验码的组成
    若信息码占k位,则校验码就占n-k位,其中,n为CRC码的字长,所以又称为(n,k)码。校验码位数越多,校验能力越强。

    CRC编码的计算
    采用的是模2运算,其加减运算的规则是按位运算,不发生借位和进位。
    下面以实例解释:
    假设使用的生成多项式是G(X)=X3+X+1。4位的原始报文为1010,求编码后的报文。
    解:
    1、将生成多项式G(X)=X3+X+1转换成对应的二进制除数1011。
    转换方式为Xi中的i对应二进制数的指数2^i。如上式X3+X+1可解为
    二进制除数的计算
    2、生成多项式有4位(R+1)。
    注意:4位的生成多项式计算所得的校验码为3位,R为校验码位数(校验码的位数=二进制除数位数-1)。

    要把原始报文C(X)=1010左移3位(即校验码的位数),低位补0,变成1010 000,即被除数

    3、用生成多项式对应的二进制除数对左移3位后的原始报文(即1010 000)进行模2除(高位对齐),相当于按位异或得到的余位011,所以最终编码为:1010 011。如下图
    校验位r的计算
    所得的商没有意义,余数保留r位(即校验码的位数)。然后将原数据与校验码(即上面所求得的余数)拼接在一起,就构成了一个CRC码。

    展开全文
  • 多项式编码(polynomial code),也称为CRC(cyclic redundancy check,循环冗余校验码),多项式编码的思想是:将位串看成是系数为0或1的多项式。CRC校验保护的单位是数据块。数据块的大小根据实际情况而定。每一个...
  • 现在此说明下什么是CRC:循环冗余码校验 英文名称为Cyclical Redundancy Check,简称CRC,它是利用除法及余数的原理来作错误侦测(Error Detecting)的。实际应用时,发送装置计算出CRC值并随数据一同发送给接收装置,...

    最近在实习期间需要用到数据的校验,所选为CRC16,那么就在此总结一番吧。

    现在此说明下什么是CRC:循环冗余码校验 英文名称为Cyclical Redundancy Check,简称CRC,它是利用除法及余数的原理来作错误侦测(Error Detecting)的。实际应用时,发送装置计算出CRC值并随数据一同发送给接收装置,接收装置对收到的数据重新计算CRC并与收到的CRC相比较,若两个CRC值不同,则说明数据通讯出现错误

    那么其实CRC有比较多种,比如CRC16、CRC32 ,为什么叫16、32呢。在这里并非与位有和关系。而是由所确定的多项式最高次幂确定的。如下所示。理论上讲幂次越高校验效果越好。

    CRC(12位) =X12+X11+X3+X2+X+1

    CRC(16位) = X16+X15+X2+1

    CRC(CCITT) = X16+X12 +X5+1

    CRC(32位) = X32+X26+X23+X16+X12+X11+X10+ X8+X7+X5+X4+X2+X+1

    循环冗余校验码(CRC)的基本原理是:在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码又叫(N,K)码。对于一个给定的(N,K)码,可以证明存在一个最高次幂为N-K=R的多项式G(x)。根据G(x)可以生成K位信息的校验码,而G(x)叫做这个CRC码的生成多项式。

    校验码的具体生成过程为:假设发送信息用信息多项式C(X)表示,将C(x)左移R位,则可表示成C(x)*2R,这样C(x)的右边就会空出R位,这就是校验码的位置。通过C(x)*2R除以生成多项式G(x)得到的余数就是校验码。

    几个基本概念

    1、多项式与二进制数码

    多项式和二进制数有直接对应关系:x的最高幂次对应二进制数的最高位,以下各位对应多项式的各幂次,有此幂次项对应1,无此幂次项对应0。可以看出:x的最高幂次为R,转换成对应的二进制数有R+1位。

    多项式包括生成多项式G(x)和信息多项式C(x)。

    如生成多项式为G(x)=x4+x3+x+1, 可转换为二进制数码11011。

    而发送信息位 1111,可转换为数据多项式为C(x)=x3+x2+x+1。

    2、生成多项式

    是接受方和发送方的一个约定,也就是一个二进制数,在整个传输过程中,这个数始终保持不变。

    在发送方,利用生成多项式对信息多项式做模2除生成校验码。在接受方利用生成多项式对收到的编码多项式做模2除检测和确定错误位置。

    应满足以下条件:

    a、生成多项式的最高位和最低位必须为1。

    b、当被传送信息(CRC码)任何一位发生错误时,被生成多项式做模2除后应该使余数不为0。

    c、不同位发生错误时,应该使余数不同。

    d、对余数继续做模2除,应使余数循环。

    将这些要求反映为数学关系是比较复杂的。但可以从有关资料查到常用的对应于不同码制的生成多项式如图9所示:

    N           K           码距d           G(x)多项式           G(x)

    7           4           3           x3+x+1           1011

    7           4           3           x3+x2+1           1101

    7           3           4           x4+x3+x2+1           11101

    7           3           4           x4+x2+x+1           10111

    15           11           3           x4+x+1           10011

    15           7           5           x8+x7+x6+x4+1           111010001

    31           26           3           x5+x2+1           100101

    31           21           5           x10+x9+x8+x6+x5+x3+1           11101101001

    63           57           3           x6+x+1           1000011

    63           51           5           x12+x10+x5+x4+x2+1           1010000110101

    1041           1024                       x16+x15+x2+1           11000000000000101

    图9 常用的生成多项式

    3、模2除(按位除)

    模2除做法与算术除法类似,但每一位除(减)的结果不影响其它位,即不向上一位借位。所以实际上就是异或。然后再移位移位做下一位的模2减。步骤如下:

    a、用除数对被除数最高几位做模2减,没有借位。

    b、除数右移一位,若余数最高位为1,商为1,并对余数做模2减。若余数最高位为0,商为0,除数继续右移一位。

    c、一直做到余数的位数小于除数时,该余数就是最终余数。

    【例】1111000除以1101:

    1011———商

    ————

    1111000-----被除数

    1101———— 除数

    ————

    010000

    1101

    ————

    01010

    1101

    ————

    111————余数

    CRC码的生成步骤

    1、将x的最高幂次为R的生成多项式G(x)转换成对应的R+1位二进制数。

    2、将信息码左移R位,相当与对应的信息多项式C(x)*2R

    3、用生成多项式(二进制数)对信息码做模2除,得到R位的余数。

    4、将余数拼到信息码左移后空出的位置,得到完整的CRC码。

    【例】假设使用的生成多项式是G(x)=x3+x+1。4位的原始报文为1010,求编码后的报文。

    解:

    1、将生成多项式G(x)=x3+x+1转换成对应的二进制除数1011。

    2、此题生成多项式有4位(R+1),要把原始报文C(x)左移3(R)位变成1010000

    3、用生成多项式对应的二进制数对左移4位后的原始报文进行模2除:

    1001-------商

    ------------------------

    1010000

    1011----------除数

    ------------

    1000

    1011

    ------------

    011-------余数(校验位)

    5、编码后的报文(CRC码):

    1010000

    +          011

    ------------------

    1010011

    CRC的和纠错

    在接收端收到了CRC码后用生成多项式为G(x)去做模2除,若得到余数为0,则码字无误。若如果有一位出错,则余数不为0,而且不同位出错,其余数也不同。可以证明,余数与出错位的对应关系只与码制及生成多项式有关,而与待测碼字(信息位)无关。图10给出了G(x)=1011,C(x)=1010的出错模式,改变C(x)(码字),只会改变表中码字内容,不改变余数与出错位的对应关系。

    收到的CRC码字           余数           出错位

    码位           A7           A6           A5           A4           A3           A2           A1

    正确           1           0           1           0           0           1           1

    000           无

    错 误           1           0           1           0           0           1           0

    1           0           1           0           0           0           1

    1           0           1           0           1           1           1

    1           0           1           1           0           1           1

    1           0           0           0           0           1           1

    1           1           1           0           0           1           1

    0           0           1           0           0           1           1

    001010100011110111101           1234567

    图10 (7,4)CRC码的出错模式(G(x)=1011)

    如果循环码有一位出错,用G(x)作模2除将得到一个不为0的余数。如果对余数补0继续除下去,我们将发现一个有趣的结果;各次余数将按图10顺序循环。例如第一位出错,余数将为001,补0后再除,第二次余数为010,以后依次为100,0ll…,反复循环,这就是“循环码”名称的由来。这是一个有价值的特点。如果我们在求出余数不为0后,一边对余数补0继续做模2除,同时让被检测的校验码字循环左移。图10说明,当出现余数(101)时,出错位也移到A7位置。可通过异或门将它纠正后在下一次移位时送回A1。这样我们就不必像海明校验那样用译码电路对每一位提供纠正条件。当位数增多时,循环码校验能有效地降低硬件代价,这是它得以广泛应用的主要原因。

    通信与网络中常用的CRC

    在数据通信与网络中,通常k相当大,由一千甚至数千数据位构成一帧,而后采用CRC码产生r位的校验位。它只能检测出错误,而不能纠正错误。一般取r=16,标准的16位生成多项式有CRC-16=x16+x15+x2+1 和 CRC-CCITT=x16+x15+x2+1。

    一般情况下,r位生成多项式产生的CRC码可检测出所有的双错、奇数位错和突发长度小于等于r的突发错以及(1-2-(r-1))的突发长度为r+1的突发错和(1-2-r)的突发长度大于r+1的突发错。例如,对上述r=16的情况,就能检测出所有突发长度小于等于16的突发错以及99.997%的突发长度为17的突发错和99.998%的突发长度大于17的突发错。所以CRC码的检错能力还是很强的。这里,突发错误是指几乎是连续发生的一串错,突发长度就是指从出错的第一位到出错的最后一位的长度(但是,中间并不一定每一位都错)。

    【例1】某循环冗余码(CRC)的生成多项式 G(x)=x3+x2+1,用此生成多项式产生的冗余位,加在信息位后形成 CRC 码。若发送信息位 1111 和 1100 则它的 CRC 码分别为_A_和_B_。由于某种原因,使接收端收到了按某种规律可判断为出错的 CRC 码,例如码字_C_、_D_、和_E_。(1998年试题11)

    供选择的答案

    A:① lllll00           ② 1111101           ③ 1111110           ④ 1111111

    B:① 1100100           ② 1100101           ③ 1100110           ④ 1100111

    C~E:① 0000000           ② 0001100           ③ 0010111

    ⑤ 1000110           ⑥ 1001111           ⑦ 1010001           ⑧ 1011000

    解:

    A:G(x)=1101,C(x)=1111 C(x)*23÷G(x)=1111000÷1101=1011余111

    得到的CRC码为1111111

    B:G(x)=1101,C(x)=1100 C(x)*23÷G(x)=1100000÷1101=1001余101

    得到的CRC码为1100101

    C~E:

    分别用G(x)=1101对①~⑧ 作模2除: ① 0000000÷1101 余000     ② 1111101÷1101 余001

    ③ 0010111÷1101 余000     ④ 0011010÷1101 余000     ⑤ 1000110÷1101 余000

    ⑥ 1001111÷1101 余100     ⑦ 1010001÷1101 余000     ⑧ 1011000÷1101 余100

    所以_C_、_D_和_E_的答案是②、⑥、⑧

    【例2】计算机中常用的一种检错码是CRC,即 _A_ 码。在进行编码过程中要使用 _B_ 运算。假设使用的生成多项式是 G(X)=X4+X3+X+1, 原始报文为11001010101,则编码后的报文为 _C_ 。CRC码 _D_ 的说法是正确的。

    在无线电通信中常采用它规定码字长为7位.并且其中总有且仅有3个“1”。这种码的编码效率为_E_。

    供选择的答案:

    A:① 水平垂直奇偶校验                        ② 循环求和                           ③ 循环冗余                           ④正比率

    B:① 模2除法                        ②定点二进制除法                      ③二-十进制除法                    ④循环移位法

    C:① 1100101010111              ② 110010101010011         ③ 110010101011100         ④ 110010101010101

    D:① 可纠正一位差错                                                   ②可检测所有偶数位错

    ③ 可检测所有小于校验位长度的突发错                     ④可检测所有小于、等于校验位长度的突发错

    E:① 3/7          ② 4/7          ③ log23/log27        ④ (log235)/7

    解:从前面有关CRC的论述中可得出:     A:③ 循环冗余     B:① 模2除法

    C:G(x)=11011,C(x)=11001010101,C(x)*24÷G(x)=110010101010000÷11011 余0011

    得到的CRC码为② 110010101010011

    D:从前面有关通信与网络中常用的CRC的论述中可得出:④ 可检测所有小于、等于校验位长度的突发错

    E:定比码又叫定重码,是奇偶校验的推广。在定比码中,奇数或偶数的性质保持不变,然而附加一种限制,每个字中1的总数是固定的。随用途之不同,定比码要求的附加校验位可能多于一个,但较之单一的奇偶校验将增加更多的检错能力。

    所谓7中取3定比码,就是整个码字长度为7位,其中1的位数固定为3。所有128个7位代码(0000000~1111111)中只有1的位数固定为3的才是其合法码字。可以用求组合的公式求出其合法码字数为:C73=7!/(3!*(7-3)!)=7*6*5/(1*2*3)=35

    编码效率=合法码字所需位数/码字总位数=(log235)/7

    而对于CRC的实现有两种方式,分别为多项式和查表法

    下面先讲讲多余多项式的实现,附代码如下

    /*

    * 函数名:GetCrc32

    * 函数原型:unsigned int GetCrc32(char* InStr,unsigned int len)

    * 参数:InStr ---指向需要计算CRC32值的字符串

    * len ---为InStr的长度

    * 返回值为计算出来的CRC32结果。

    *

    * 函数名:GetCrc16

    * 函数原型:unsigned short GetCrc16(char* InStr,unsigned int len)

    * 参数:InStr ---指向需要计算CRC32值的字符串

    * len ---为InStr的长度

    * 返回值为计算出来的CRC32结果。

    *

    * 2009/03/26 Edit By iawen

    *

    */

    unsigned int GetCrc32(char* InStr,unsigned int len){

    //生成Crc32的查询表

    unsigned int Crc32Table[256];

    int i,j;

    unsigned int Crc;

    for (i = 0; i < 256; i++){

    Crc = i;

    for (j = 0; j < 8; j++){

    if (Crc & 1)

    Crc = (Crc >> 1) ^ 0xEDB88320;

    else

    Crc >>= 1;

    }

    Crc32Table[i] = Crc;

    }

    //开始计算CRC32校验值

    Crc=0xffffffff;

    for(int i=0; i

    Crc = (Crc >> 8) ^ Crc32Table[(Crc & 0xFF) ^ InStr[i]];

    }

    Crc ^= 0xFFFFFFFF;

    return Crc;

    }

    unsigned short GetCrc16(char* InStr,unsigned int len){

    //生成Crc16的查询表

    unsigned short Crc16Table[256];

    unsigned int i,j;

    unsigned short Crc;

    for (i = 0; i < 256; i++)

    {

    Crc = i;

    for (j = 0; j < 8; j++)

    {

    if(Crc & 0x1)

    Crc = (Crc >> 1) ^ 0xA001;

    else

    Crc >>= 1;

    }

    Crc16Table[i] = Crc;

    }

    //开始计算CRC16校验值

    Crc=0x0000;

    for(i=0; i

    Crc = (Crc >> 8) ^ Crc16Table[(Crc & 0xFF) ^ InStr[i]];

    }

    //Crc ^= 0x0000;

    return Crc;

    }

    #include

    using namespace std;

    int main()

    {

    char str[]="iawen";

    unsigned int crc;

    //crc 32校验

    crc=GetCrc32(str,5);

    printf("%08X\n",crc);

    //crc 16校验

    crc=GetCrc16(str,5);//0x5359

    //printf("%04X\n",crc);

    system("pause");

    return 0;

    }对于查表法,过几天小弟弄熟悉了再发上来吧。呵呵^_^

    展开全文
  • 文章目录前言一、进制转换1.1 二进制转换为八进制数和十六进制数1.2 任意进制数转换为十进制数1.3 十进制转换为任意进制二、校验码求取2.1海明校验码2.2循环冗余校验CRC总结 前言 了解进制间的相互转换: 二...



    前言

    了解进制间的相互转换:

    1. 二进制与八、十六进制间的相互转换
    2. 任意进制转换为十进制
    3. 十进制转换为任意进制数

    了解如何求海明校验码及循环冗余校验CRC码


    以下是本篇文章正文内容

    一、进制转换

    1.1 二进制转换为八进制数和十六进制数

    思路:分为小数部分及整数部分,整数部分:从小数点往左分组,将一串二进制数分为3位(八进制)一组4位(十六进制)一组在数的最左边根据需要补0。小数部分:从小数点后开始分组,适当在最右边补0

    举例
    1.二进制数(11111011.01110)转换为八进制数(三位一组)
    在这里插入图片描述

    2.二进制数(11111011.01110)转换为十六进制数(四位一组)
    在这里插入图片描述

    1.2 任意进制数转换为十进制数

    思路:将任意进制的各位数码与他们的权值相乘并将他们相加得到十进制数。

    举例:
    1.二进制数(101001.01)转换为十进制数
    在这里插入图片描述
    2.八进制数(373)转换为十进制数
    在这里插入图片描述

    3.十六进制数(fb)转换为十进制数

    在这里插入图片描述

    1.3 十进制转换为任意进制

    思路:1.整数部分采取除基取余,小数部分采用乘基取余。

    2.拼凑法

    1.举例十进制数(254.25)转换为二进制数
    在这里插入图片描述
    拼凑法:254.25 = 128 + 64 + 32 + 16 + 8 + 4 + 2 + 0.25

    特殊情况(小数乘不到1无限循环,无法用二进制精准表示,例如十进制数0.3)

    在这里插入图片描述
    3.举例十进制数(254.25)转换为八进制数
    在这里插入图片描述
    2.举例十进制数(254.25)转换为十六进制数
    在这里插入图片描述

    二、校验码求取

    2.1海明校验码

    ps:异或((1 0 得1) 0 0 或1 1 得 0)
    获取步骤

    1. 根据2^k >= n + k + 1 获取 k,n为有效信息位数
    2. 确定海明校验码的分布位置
    3. 分组形成校验关系
    4. 获得校验位值

    举例带校验数据(10101011)若采用海明校验,其海明码为?
    在这里插入图片描述

    代码如下(示例):

    2.2循环冗余校验CRC码

    思路:在k位信息码后拼接R位校验码,在与生成多项式做模二除运算(异或运算)求得余数为校验码

    步骤:

    1. 移位(左移R,低位补0)
    2. 相除(对最高几位做异或运算 ,除数右移一位,余数最高为1,商为1,对余数做异或,若商为1,对0做异或 循环至余数小于除数时 ,把余数作为校验位)

    举例生成多项式为10011,带校验的数据为(10101011),求它的CRC码

    在这里插入图片描述

    总结

    考研复习,参考教材王道2022计算机组成原理 笔记软件 :Notability

    展开全文
  • CRC16循环冗余校验

    2018-07-29 09:27:15
    CRC-16校验码计算方法: 常用查表法和计算法。计算方法一般都是: (1)、预置1个16位的寄存器为十六进制FFFF(即全为1),称此寄存器为CRC寄存器; (2)、把第一个8位二进制数据(既通讯信息帧的第一个字节)...
  • 众所周知,不可能有永远都不会出错的人,同样也不可能有永远不出错的计算机,永远不出错的数据。人有知错能改的觉悟,计算机也...何为校验码校验码是通过一种计算方法,发出端在原始数据的尾部添加若干数据;然后接...
  • 其实很简单的问题,其根本思想就是先在要发送的帧后面附加一个数(这个就是用来校验校验码,但要注意,这里的数也是二进制序列的,下同),生成一个新帧发送给接收端。当然,这个附加的数不是随意的,它要使所生成...
  • 描述一、CRC简介循环冗余校验(Cyclic Redundancy Check, CRC)是一种根据网络数据包或电脑文件等数据产生简短固定位数校验码的一种散列函数,主要用来检测或校验数据传输或者保存后可能出现的错误。它是利用除法及...
  • 循环冗余码校验

    2016-04-17 06:45:59
    循环冗余码校验(Cyclic Redundancy Check)5.3.2循环冗余校验检错方案 上节介绍的奇偶校验码(PCC)只能校验一位错误,本节所要介绍的循环冗余校验码(CRC)的检错能力更强,可以检出多位错误。 1. CRC校验原理 CRC...
  • 校验码——CRC循环冗余校验码 一、循环冗余校验码 在串行传送(磁盘、通讯)中,广泛采用循环冗余校验码(CRC)。CRC也是给信息加上几位校验码,以增加整个编码系统的距和查错纠错能力。 CRC的理论很...
  • 奇偶校验 奇偶校验包含奇校验和偶校验两种...有效信息(被校验的信息)部分可能是奇性(“1”的个数为奇数)的,也可能是偶性的,所以奇、偶两种校验都只需配一个校验码,就可以使整个校验码满足指定的奇偶性要求。...
  • CRC校验循环冗余校验)是数据通讯中最常采用的校验方式。在嵌入式软件开发中,经常要用到CRC 算法对各种数据进行校验。因此,掌握基本的CRC算法应是嵌入式程序员的基本技能。 从奇偶校验说起 所谓通讯过程的校验是...
  • 现在的产品开发过程中,无论是数据的储存还是传输,都需要确保数据的准确性,所以就需要在数据帧后面附加一串校验码,方便接收方使用校验码校验接收到的数据是否是正确的。 常用的校验方式有奇偶校验、异或校验、...
  • CRC循环冗余校验码总结

    万次阅读 多人点赞 2015-04-28 15:53:45
    先在此说明下什么是CRC:循环冗余码校验 英文名称为Cyclical Redundancy Check,简称CRC,它是利用除法及余数的原理来作错误侦测(Error Detecting)的。实际应用时,发送装置计算出CRC值并随数据一同发送给接收装置...
  • 比起奇偶校验码(PCC)只能校验一位错误,循环冗余校验码(CRC)的检错能力更强,可以检出多位错误。 1.CRC校验原理 CRC校验原理看起来比较复杂,好难懂,因为大多数书上基本上是以二进制的多项式形式来说明的。其实...
  • 模2加法1+1=0, 0+1=1, 1+0=1, 0+0=0模2减法1-1=0,...模2乘法基于模2加法模运算举例CRC校验码的位数余数的位数一定要是比除数位数只能少一位,哪怕前面位是0,甚至是全为0(附带好整除时)余数 是指 CRC校验码除数 是指...
  • 计算机系统基础知识——循环冗余校验码(CRC)

    千次阅读 多人点赞 2020-10-14 14:27:09
    前言:循环冗余校验码(cyclie redundancy check)简称CRC(循环),是一种能力相当强的检错、纠错,并且实现编码和检的电路比较简单,常用于串行传送(二进制位串沿一条信号线逐位传送)的辅助存储器与主机的...
  • CRC16循环冗余算法

    2020-06-01 14:50:29
    CRC16循环冗余算法,高位在前和低位在后都有;...对特定字符串进行转换成16进制字符串,然后将字符串进行CRC16校验,得到校验码. 次工具类已经经过本人亲自验证,完全符合标准,目前项目中用到的就是这个工具类.
  • 奇偶校验码是 奇校验码 和 偶校验码 的统称. 它们都是通过在要校验的编码上加一位校验位组成. 如果是 奇校验 加上校验位后,编码中1的个数为 奇数个 如果是 偶校验 加上校验位后,编码中1的个数为 偶数个 水平奇偶校验...
  • 循环冗余校验码CRC算法实现和求出碰撞值循环冗余校验码CRC算法实现和求出碰撞值答:八位的碰撞一共有八个10001101 101010011110 101010101011 101010111000 101011000001 101011010010 101011100111 101011110100 ...
  • 文章目录知道两个概念模2和模2减两种不同的二进制除法除法模2除法CRC 循环冗余校验编码过程差错检测能力 谈CRC循环冗余校验的之前,先把二进制除法说一下,先回忆一下十进制之间的除法是如何运算的, 这个式子在做...
  • 一、 奇偶校验码、 二、 奇偶校验码 特点、 三、 奇偶校验码 示例、 四、 CRC 循环冗余码 ( 原理说明 )、 五、 CRC 循环冗余码 计算示例、
  • 细说循环冗余校验码

    万次阅读 多人点赞 2017-07-12 20:01:08
    初识循环冗余校验码: 为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错检验措施,目前广泛使用的是循环冗余(CRC)检验的检错技术。 CRC检验原理: 在发送端,先把数据划分为组,假定每个组...
  • 循环冗余校验(CRC)算法

    千次阅读 2017-06-08 21:17:30
    写给嵌入式程序员的循环冗余校验(CRC)算法入门引导 前言 CRC校验循环冗余校验)是数据通讯中最常采用的校验方式。在嵌入式软件开发中,经常要用到CRC 算法对各种数据进行校验。因此,掌握基本的CRC算法应是...
  • CRC 循环冗余校验码 的计算方法

    万次阅读 2017-12-06 10:24:29
    循环冗余校验CRC(Cyclical Redundancy Check)字段位于尾部,有32位,有时称为IEEE/ANSI标准的CRC32.要使用一个n位CRC监测 数据传输错误,被检查的消息首先要追加n位0形成一个扩展消息(使用模2除法)除以一个n+1...
  • CRC循环冗余校验码

    2020-08-27 15:39:54
    CRC校验原理:模2除法,与二进制除法不同 模2加法:1+1=0,0+1=1,0+0=0 —— 无进位无借位 (相同为0,相异为1) 模2减法:1-1=0,0 -1=1, 0-0=0 —— 无进位无借位 (相同为0,相异为1) 方法:1、当余数位与...
  • @Component public class Crc16Util { /*************************************... 描 述: CRC16 循环冗余校验算法。 参 数 一: *puchMsg:需要校验的字符串指针 参 数 二: usDataLen:要校验的字符串长度 返 回 ..
  • 关于循环冗余码的定义,可以百度:http://baike.baidu.com/view/575295.htm#sub575295计算余数的二进制除法第一步,要在数据位(被除数)后边补 0 , 0 的个数比除数(生成多项式)少一位。第二步,做除法,从被除数的头五...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,275
精华内容 3,310
关键字:

16进制循环冗余码校验