发表于:2003-09-17 17:12:00
3楼
unsigned int CRC16();
void main()
{unsigned char data[2];
unsigned int crc;
printf("pls input data\n");
scanf("%d,%d",&data[0],&data[1]);
crc=CRC16(data, strlen(data));
printf("crc=%x\n",crc);
}
#define POLY 0x8408
unsigned int CRC16(char *data_p, unsigned int length)
{
unsigned char i;
unsigned int data;
unsigned int crc = 0xffff;
if(length == 0)
return (~crc);
do
{
for(i=0,data=((unsigned int)0xFF & *data_p++); i < 8; i++, data >>= 1)
{
if((crc & 0x0001) ^ (data & 0x0001))
crc = (crc >> 1) ^ POLY;
else
crc >>= 1;
}
} while (--length);
crc = ~crc;
data = crc;
crc = (crc << 8) | ((data >> 8) & 0xFF);
return (crc); }