Code: Select all
unsigned int crc32Table[256];
Code: Select all
void init_CRC32 (){
int i, j;
unsigned int dwPolynomial;
unsigned int dwCrc;
dwPolynomial = 0xEDB88320; // VIDEO4
// Lookup table
for (i = 0; i<256; i++){
dwCrc = i;
for (j = 8; j>0; j--){
if (dwCrc & 1){
dwCrc >>= 1;
dwCrc ^= dwPolynomial;
}
else {
dwCrc >>= 1;
}
}
crc32Table[i] = dwCrc;
}
}
Code: Select all
unsigned int getCRC32(unsigned char *buf, unsigned int length){
unsigned int crc32Result = 0xFFFFFFFF;
unsigned char iLookup;
int i;
for (i=0; i<length; i++){
iLookup = (crc32Result & 0xFF) ^ buf[i];
crc32Result >>= 8;
crc32Result ^= crc32Table[iLookup];
}
return ~(crc32Result);
}