zoukankan      html  css  js  c++  java
  • CRC校验算法

    typedef unsigned char UCHAR;
    typedef unsigned char BOOL;

    /* 计算cnt字节数据的crc,最后一个字节的低7比特必须是0,实际上求的是(cnt×8-1)比特数据的crc */
    UCHAR CRC7_Cal(UCHAR *pSrc, UINT32 cnt);

    UCHAR CRC7_Cal(UCHAR *pSrc, UINT32 cnt)
    {
    UCHAR crc7 = 0x89;    // 除数多项式为G(X) = X^7 + X^3 + 1。
    UINT8 count = 0;    // 记录已经取了多少位数到余数中。
    UINT8 temp1 = 0;
    UINT8 temp2 = 0;
    UCHAR crc = pSrc[0];    // 余数。
    count = 8;

    /* 求余数crc */
    while(count < cnt * 8)
    {
       /* 去掉余数中最高位0 */
       temp1 = crc & 0x80;
       while(0 == temp1)
       {
        crc = (crc << 1) & 0xfe;
        temp2 = pSrc[count / 8];
        temp2 = (temp2 >> (7 - (count % 8))) & 0x01;
        crc = crc | temp2;
        temp1 = crc & 0x80;
        count++;    // 更新计数
        if(count == cnt * 8)
        {
         break;
        }
       }
       if((count == cnt * 8) && (0 == temp1))
       {
        break;
       }
       crc = crc ^ crc7;   // 模2除法
    }

    return crc;
    }

  • 相关阅读:
    String,StringBuffer与StringBuilder的区别?
    Digui
    Digui1
    逆序
    TestOverWrite
    DemoBoxWeight
    TestSuperSub
    Cast
    TestOverWrite
    Joseph
  • 原文地址:https://www.cnblogs.com/luxiaolai/p/3727948.html
Copyright © 2011-2022 走看看