?
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?!