unsigned char cal_table_high_first(unsigned char value)
{
    unsigned char i, crc;


    crc = value;
    /* 数据往左移了8位,需要计算8次 */
    for (i=8; i>0; --i)
    { 
        if (crc & 0x80)  /* 判断最高位是否为1 */
        {
        /* 最高位为1,不需要异或,往左移一位,然后与0x31异或 */
        /* 0x31(多项式:x8+x5+x4+1,100110001),最高位不需要异或,直接去掉 */
            crc = (crc << 1) ^ 0x31;        }
        else
        {
            /* 最高位为0时,不需要异或,整体数据往左移一位 */
            crc = (crc << 1);
        }
    }


    return crc;
}








unsigned char cal_table_low_first(unsigned char value)
{
    unsigned char i, crc;


    crc = value;
/* 同样需要计算8次 */
    for (i=8; i>0; --i)
    { 
        if (crc & 0x01)  /* 反序异或变成判断最低位是否为1 */
            /* 数据变成往右移位了 */
            /* 计算的多项式从0x31(0011 0001)变成了0x8C (1000 1100) */
/* 多项式值,原来的最高位变成了最低位,原来的最低位变成最高位,8位数据高低位交换一下位置 */
            crc = (crc >> 1) ^ 0x8C;
        else
            crc = (crc >> 1);
    }


    return crc;
}




void  create_crc_table(void)
    {
        unsigned short i;
        unsigned char j;


        for (i=0; i<=0xFF; i++)
        {
            if (0 == (i%16))
                TRACE("\n");


            j = i&0xFF;
            TRACE( "%d, \r\n", cal_table_low_first (j) );  /*依次计算每个字节的crc校验值*/
        }
    }
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐