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 ;
}