CRC循环冗余校验讲解

 crc网上很多的是crc16,crc32,我今天介绍一下crc4,方便大家调试程序.

#include <stdio.h>
typedef unsigned char uchar;
typedef unsigned short uint;

uchar crc_4;
// poxy = 0x13 = 10011
//uchar crcbuff_4[]={0x01,0x01,0x11,0x00,0x00};
uchar crcbuff_4[]={0x02};

uchar crc4two(uchar *ptr,uchar len)
{
    uchar i;
    while (len --)
    {
        for(i = 0x80;i!=0;i >>= 1)
        {
            crc_4 <<= 1;
            if((crc_4 & 0x10)!=0) //余数首位为1时,需要和poly进行模运算
            {
               
                crc_4 ^= 0x13;
            }
            if((*ptr & i)!=0)
            {
                 //crc_4 = crc_4^(0x10^0x13);
                  crc_4 = crc_4^0x13;
            }
        }
        ptr++;

    }
    return crc_4;
}


uchar crc4(uchar *ptr,uchar len)
{
    uchar i;
    while (len --)
    {
        for(i = 0x80;i!=0;i >>= 1)
        {
            if((crc_4 & 0x08)!=0)
            {
                crc_4 <<= 1;
                crc_4 ^= 0x3;
            }
            else
            {
                crc_4 <<= 1;
            }
            if((*ptr & i)!=0)
            {
                crc_4 ^= 0x13;
            }
        }
        ptr++;

    }
    return crc_4;
}
void main()
{
    uchar *ptr;
    ptr = crcbuff_4;
    crc_4 = 0;
    crc_4 =crc4(ptr,1);
    printf("%x\n",crc_4);

    ptr = crcbuff_4;
    crc_4 = 0;
    crc_4 =crc4two(ptr,1);
    printf("%x\n",crc_4);
    return ;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值