#include<stdio.h>
unsigned int crc16(unsigned char ch,unsigned int crc);
struct Data_32
{
unsigned __int32 bit0 : 8;
unsigned __int32 bit1 : 8;
unsigned __int32 bit2 : 8;
unsigned __int32 bit3 : 8;
};
union CRC_Data
{
struct Data_32 data;
unsigned __int32 data_int;
};
int main()
{
unsigned __int8 i=0,j=0;
unsigned __int16 tmp;
union CRC_Data crc_reg,crc_data;
crc_reg.data_int=0xffff0000;
crc_data.data_int=0xcdab;
for(j=0;j<2;j++)
{
crc_reg.data.bit2^=crc_data.data.bit0;
i=8;
while(i>0)
{
crc_reg.data_int>>=1;
if((crc_reg.data_int&0x8000)!=0)
{
crc_reg.data_int^=0xA0010000;
}
i--;
}
crc_data.data.bit0=crc_data.data.bit1;
}
printf("%x\t%x\n",crc_reg.data.bit2,crc_reg.data.bit3);
tmp=crc16(0x00ab,0xffff);
tmp=crc16(0x00cd,tmp);
tmp=crc16(0x00bf,tmp);
tmp=crc16(0x0015,tmp);
printf("%x\n",tmp);
return 0;
}
unsigned int crc16(unsigned char ch,unsigned int crc)
{
crc ^=ch;
ch =8;
while(ch--)
{
if(crc&0x01)
{
crc >>=1;
crc ^=0xa001;
}
else
{
crc >>=1;
}
}
return crc;
}