CRC32 in Häppchen
-
Hallo folks!
Habe einen CRC32 Algorithmus und möchte den aber nicht immer über die ganze Datei ausführen sondern in kleinen Stücken über die Datei. Folgender Code ist entstanden:
unsigned long get_crc32(FILE *filename) { int length = 0; int len = 0; unsigned long crc32 = 0xffffffff; unsigned char *ptr = NULL; unsigned char *buf = NULL; /* Allocate reading buffer */ buf = (unsigned char*)malloc(8192); memset(buf, 0, sizeof(buf)); do { length = (int)fread(buf, 1, 8192, filename); for (ptr = buf, len = length; len > 0; ++ptr, --len) { crc32 = (crc32 << 8) ^ crc32_table[(crc32 >> 24) ^ *ptr]; } }while (length == 8192); free( buf ); buf = NULL; return ~crc32; } }
Sind die Files unter 8K groß, kommt das richtige heraus.
Der Algorithmus an sich funktioniert also. Nur bei größeren Angelegenheiten wird meine Checksum verhunzt. Irgendwelche Vorschläge/Anregungen?
Vermutlich mache ich falsch weiter, wenn der nächste Block drankommt?!