logo1.bmp (61374 byte)

 

Crc source

/*****************************************
crc.c - straightforward 16 bit CRC
by Alberto Ricci Bitti
released to public domain

compatibility notes:
works on little-endian machines only,
assumes 32 bit long integers,
16 bit integers and 8 byte characters
*****************************************/

/*crc-16 standard root*/
#define POLYNOMIAL 0x8005

/*place your own here*/
#define INITIAL_VALUE 0x0000 

union {
   unsigned long Whole;
   struct
   {
      unsigned char Data;
      unsigned int  Remainder;
      unsigned char Head;
   } Part;
} CRC_buffer;

/*internal use only - puts a byte*/
static void PutCRC(unsigned char b)
{   
   unsigned char i;
   CRC_buffer.Part.Data = b;
   for (i=0; i<8; i++)
   {
       CRC_buffer.Whole = CRC_buffer.Whole << 1;
       if (CRC_buffer.Part.Head & 0x01)
          CRC_buffer.Part.Remainder ^= POLYNOMIAL;
  };
}


/*call this routine with your own data buffer*/
/* yes! it's really that simple!*/

unsigned int CRC (unsigned char * Data, unsigned int Length)
{
   CRC_buffer.Part.Remainder = INITIAL_VALUE;
   while (Length--  >  0)
      PutCRC(*Data++);
   PutCRC(0);
   PutCRC(0);
   return CRC_buffer.Part.Remainder;
}

 

home

nutchips

designs f.a.q.

provokations

crc guide who am I ? awards
home | nutchips | designs | f.a.q. | provokations | crc guide | who am I ? | awards