2016-06-02 12 views
1

Ich bin ein Java-Programmierer und versuche, C++ zu lernen. Ich habe eine funktionierende CRC32-Funktion, aber es dauert Chars von einem Array und berechnet seine CRC32.Eine Datei für CRC32 lesen

Ich möchte eine Datei lesen und CRC32 der Datei berechnen.

Sollte ich die Datei lesen, teilen Sie es und legen Sie alle Daten in Array oder gibt es irgendwelche einfachen Möglichkeiten?

unsigned int crc32(unsigned char *message) { 
int i, j; 

unsigned int byte, crc; 

i = 0; 
crc = 0xFFFFFFFF; 
while (message[i] != 0) { 
    byte = message[i]; // Get next byte. 

    crc = crc^byte; 

    for(j = 7; j>=0; j--){ 
    crc = (crc >> 1)^(crc & 1 ? 0xEDB88320 : 0); 
    } 
    i = i + 1; 
} 
    return ~crc; 
} 

int main() 
{ 
unsigned char a[] = {'e',0}; 

cout << std::hex <<"0x" << crc32(a); 

return 0; 

} 

Antwort

1

Sie können die Datei in einem Klumpen mit dem fread oder Stream APIs laden und Ihre crc32 Funktion auf der Anwendung. Oder Sie können es in Stücke laden und die Funktion auf diese Weise anwenden. Für Dateien ab einer bestimmten Größe ist das der beste Weg, um herumzukommen, obwohl Sie in der Tat ziemlich große Größen erreichen können, ohne dass ein Chunking erforderlich ist (dank x64 großer Adressräume, vom Betriebssystem verarbeiteter virtueller Speicher, Speicherabbildung usw.). Im Allgemeinen gelten unabhängig von Programmiersprachen die gleichen Prinzipien für das Entwerfen von Programmen, mehr oder weniger - was Sie durch den Wechsel von Sprachen erhalten, sind verschiedene APIs, verschiedene Abstraktionen (obwohl immer mehr Sprachen auf demselben Set konvergieren) Klassenbasierte Objektorientierung, Lambdas, Async/Warten usw.). Derselbe Hinweis gilt für Python, Java, C++, Ruby usw.