Wie schon beschrieben ist das C-Beispiel (vermutlich) nicht korrekt. Zusammen mit einem Kollegen habe ich nun ein Beispielprogramm implementiert, das die gleichen Prüfsummen, wie andere im Web erhältliche CRC32 Beispiele mit Lookup Table liefert: include include define CRC32_INITIAL 0xFFFFFFFF define CRC32_POLYNOMIAL 0xEDB88320 define CRC32_MSB 0x80000000 define CRC32_LSB 0x00000001 define GET_BIT_TO_LSB(b,i) (unsigned long)((b & (1 < < i)) >> i) unsigned long CRC32Add(unsigned long crc, unsigned char c) { int i; unsigned long C; C = c; for (i=0; i> 1) ^ CRC32_POLYNOMIAL; crc |= CRC32_MSB; } else crc = (crc >> 1); } return crc; } unsigned long CalculateCRC32(unsigned char *pucData, unsigned long ulLength) { unsigned long ulCount; unsigned long ulCRC; ulCRC = CRC32_INITIAL; for (ulCount = 0; ulCount < ulLength; ulCount++) { ulCRC = CRC32Add(ulCRC,pucData[ulCount]); } return (~ulCRC); /* invertiere Ergebnis */ } int main(int argc, char* argv[]) { unsigned long ulCRC; unsigned char aucBuffer[100]; /* dieser String hat die Prüfsumme CBF43926 */ strcpy((char*)aucBuffer,"123456789"); ulCRC = CalculateCRC32(aucBuffer,9); printf("\"%s\" -> CRC-32: %lX\n",aucBuffer,ulCRC); return 0; } Ich würde vorschlagen dieses Beispiel in den Artikel zu übernehmen. Allerdings sollte dann der Pseudocode auch entsprechend geändert werden. -- Chrisgb 15:18, 1. Feb 2006 (CET)