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


Anmelden zum Antworten