#include <string.h> #include <stdio.h>
// Input Data (for illustrative purposes)
unsigned char string[] = {"123456789"};
// CRC Lookup Table
unsigned int CRCtable[256];
// Code
static void generateCRCtable(void) { int i; unsigned int crc;
for(i = 0; i < 256; i++) { crc = 0; if( (i & 1) != 0) crc ^= 0x77073096; if( (i & 2) != 0) crc ^= 0xEE0E612C; if( (i & 4) != 0) crc ^= 0x076DC419; if( (i & 8) != 0) crc ^= 0x0EDB8832; if( (i & 16) != 0) crc ^= 0x1DB71064; if( (i & 32) != 0) crc ^= 0x3B6E20C8; if( (i & 64) != 0) crc ^= 0x76DC4190; if( (i & 128) != 0) crc ^= 0xEDB88320; CRCtable[i] = crc; } }
static unsigned int calculateCRC(unsigned char *string, int length) { unsigned int crc;
crc = 0xFFFFFFFF; while(length > 0) { crc = (crc >> 8) ^ CRCtable[(crc & 0xFF) ^ *string++]; length--; } crc ^= 0xFFFFFFFF; return(crc); }
int main(void) { int length;
generateCRCtable();
length = strlen((char *)string); printf("In: '%s' (%d bytes)\n", string, length); printf("Out: 0x%X\n", calculateCRC(string, length));
return 0; }
|
|