zoukankan      html  css  js  c++  java
  • CRC循环冗余校验码

    原文转载自:https://blog.csdn.net/hm108106/article/details/73332465

    1.CRC

    CRC循环冗余校验码是数据通信中的一种查错校验码。

    循环冗余检查对数据进行多项式计算,将计算结果附加在帧后面,接收数据的设备执行模2运算,保证数据传输的正确性和完整性。  

    2.模2除法      

    ①不向上借位,只要除数和被除数的位数相同就可进行计算,不比较它们的大小;

    ②模2运算中用到了模2减法,与逻辑异或相似: 
    1-1=0, 1-0=1, 0-1=1 , 0-0=0,

    ③例子: 
    这里写图片描述

    3.CRC校验的步骤

    (1)选择一个生成多项式,作为对接收的帧进行除法运算时的除数,生成多项式可以写为二进制形式;

    • 生成多项式的要求: 
      ①最高位和最低位必须为1; 
      ②当CRC码的任何一位发生错误时,新帧除生成多项式后余数不为0; 
      ③不同位发生错误时,余数应该是不同的;

    • 生成多项式转化为二进制形式: 
      如x5+x3+x2+1,写为二进制:101101

    (2)计算CRC校验码位数k=生成多项式位数-1,在要发送的数据帧后加k个0,除第一步用生成多项式转化的二进制数(使用模2除法),得到的余数即为CRC校验码;

    • 模2除时,余数的位数必须只比除数少一位,不能省略0

    (3)把得到的校验码CRC加到原数据帧后,构成一个新数据帧发送到接收端,接收端将新帧除以之前选择的除数(模2除法),如果没有余数,则表明该数据帧在传输过程中没有出错,否则出错;

    4.CRC校验例子:

    假设CRC生成多项式G(X)=X5+X4+X+1,要发送的二进制数据帧为100101110,求CRC校验码:

    ①把生成多项式转换为二进制数:110011;

    ②由生成多项式的位数为6可知,CRC校验码的位数为5,所以在数据帧后加5个0,变为10010111000000,将这个数使用模2除法除以生成多项式110011,得到余数即CRC校验码11010; 
    这里写图片描述 
    ③用得到的CRC校验码替换掉数据帧中的5个0,形成新的帧10010111011010,将这个新帧发送给接收端;

    ④接收端收到新帧后,用新帧除以上面的多项式110011(模2除法),如果余数为0,该数据帧在传输过程中没有出错,否则出错;(经验证余数为0)

  • 相关阅读:
    POJ 1556 The Doors (未完)
    setblendstate & setdepthstencilstate
    transparent 的新问题
    texCUBE() to CubemapSampler.Sample()
    error: The shader requires a sampler in slot 0 which hasn't been set [XXXsampler]
    error X3025:global variables are implicitly constant, enable compatibility mode to allow modification
    MSAA
    check environment var
    setDepthStencilState
    sampler state
  • 原文地址:https://www.cnblogs.com/814467783sweet/p/9629726.html
Copyright © 2011-2022 走看看