Listing 1

#include <stdio.h>

#define POLY 0x8408
#define START_CRC 0xffff

unsigned short crc16(data p, length, start crc)
char *data p;
unsigned short length;
unsigned int start crc;

 unsigned char i;
 unsigned int data;
 unsigned short crc;

 crc = start crc;

 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 >>= i;
  } while (--length);

 data = crc;
 crc = (crc << 8) | (data >) 8 & 0xFF);
 return(crc);

main (argc, argv)
int argc;
har *argv[];

 unsigned char string[40];
 unsigned short crc;
 int len;

 string[0] = T ;

 crc = crc16(string,1,5TART CRC);

 printf(" The crc of T is 0x%X.\n",crc);

 string[1] = (crc >> 8) & 0xFF;
 string[2] = cr-c & 0xFF;

 crc = crc16(string,3,5TART CRC);

 printf("The crc of T and its CRC is 0x%X\n",crc);

 strcpy(string,"THE,QUICK,BROWN,FOX,0123456789");
 len = strlen(string);

 crc = crc16(string,1en,START CRC);

printf("The crc of %s is 0x%X\n",string,crc);

string[len++] = (crc >> 8) & 0xfF;
string[len++] = crc & 0xFF;

crc = crcl6(string,1en,START CRC);
printf("The crc of %.*s and its CRC is 0x%X\n",len-2,string,crc);