Frage

Ich bin auf der Suche für eine Implementierung von CRC32 in C oder C ++, die als keine Kosten oder Public Domain ausdrücklich zugelassen ist. Die Umsetzung hier scheint schön, aber das einzige, was sagt es über die Lizenz ist „Quellcode “, das ist nicht gut genug. Ich würde nicht LGPL bevorzugen also muss ich nicht täuschen um mit einer DLL (meine app ist Closed-Source). Ich sah die adler32 Umsetzung in zlib, aber ich bin Überprüfung kleine Stücke von Daten, die für die Adler nicht gut ist.

War es hilfreich?

Lösung

Mit dem C ++ Bibliotheken steigern. Es gibt einen CRC dort aufgenommen werden und der Lizenz ist gut.

Andere Tipps

Die SNIPPETS C-Quellcode-Archiv hat ein CRC32 Implementierung das ist frei verwendbar:

/* Copyright (C) 1986 Gary S. Brown.  You may use this program, or
   code or tables extracted from it, as desired without restriction.*/

(Leider c.snippets.org scheint gestorben zu sein. Glücklicherweise ist die Wayback Machine hat archiviert ).

Um in der Lage sein, den Code zu kompilieren, müssen Sie typedefs für BYTE als unsigned 8-Bit-Integer und DWORD als unsigned 32-Bit-Integer hinzufügen, zusammen mit den Header-Dateien crc.h & sniptype.h .

Der einzige kritische Punkt in der Kopfzeile ist dieser Makro (die so leicht in CRC_32.c gehen konnten diese mich:

#define UPDC32(octet, crc) (crc_32_tab[((crc) ^ (octet)) & 0xff] ^ ((crc) >> 8))

Ich bin der Autor des Quellcodes an dem angegebenen Link. Während die Absicht der Lizenz Quellcode nicht klar ist (es später heute sein wird), wird der Code in der Tat offen und frei für den Einsatz in Ihren freien oder kommerziellen Anwendungen nicht an Bedingungen geknüpft.

Der CRC-Code in zlib (http://zlib.net/) gehört zu den am schnellsten ist, und hat eine sehr liberale Open-Source-Lizenz.

Und Sie sollten nicht Adler-32 außer für spezielle Anwendungen verwenden, bei denen Geschwindigkeit ist wichtiger als Fehlererkennungsleistung.

zlib.h mit ( http: //refspecs.linuxbase.org/LSB_3.0.0/LSB-Core-generic/LSB-Core-generic/zlib-crc32-1.html ):

#include <zlib.h>
unsigned long  crc = crc32(0L, Z_NULL, 0);
crc = crc32(crc, (const unsigned char*)data_address, data_len);

pycrc ist ein Python-Skript, das C CRC-Code erzeugt, mit Optionen, um den CRC-Größe, Algorithmus und das Modell zu wählen.

Es ist unter der MIT-Lizenz veröffentlicht. Ist das akzeptabel für Ihre Zwecke?

Die einfache und unkomplizierte C / C ++ Implementierung, die ich ist am Boden in einem Link auf dieser Seite gefunden:

Web-Seite: http: // www. barrgroup.com/Embedded-Systems/How-To/CRC-Calculation-C-Code

Code-Download Link: https://barrgroup.com/code/crc.zip

Es ist eine einfache Standalone-Implementierung mit einem .h und einer C-Datei. Es gibt Unterstützung für CRC32, CRC16 und CRC_CCITT durch die Verwendung von a definieren. Außerdem können Sie den Code ändern Sie den Benutzerparametereinstellungen wie das CRC-Polynom, Anfangs- / Abschluss XOR-Wert und Reflexion Optionen, wenn Sie dies wünschen.

Die Lizenz wird nicht explizit ala LGPL oder ähnlich definiert. Allerdings funktioniert die Seite sagt, dass sie den Code in der Public Domain für jeden Einsatz platzieren. Die eigentlichen Code-Dateien auch sagen.

Hoffe, es hilft!

Die mhash Bibliothek für mich ziemlich gut funktioniert. Es ist schnell genug, unterstützt mehrere Arten von Hashing (CRC32, MD5, SHA-1, HAVAL, RIPEMD128, RIPEMD160, TIGER, GOST, etc.). Um CRC32 eines Strings würden Sie so etwas tun:

 MHASH td = mhash_init(MHASH_CRC32);

 if (td == MHASH_FAILED) return -1; // handle failure

 mhash(td, s, strlen(s));

 unsigned int digest = 0; // crc32 will be stored here

 mhash_deinit(td, &digest);

 // do endian swap here if desired

rurban Gabel von SMHasher (das Original SMHasher scheint aufgegeben) hat Hardware CRC32 Unterstützung. Die Änderungen wurden hinzugefügt, bevor die anfängliche begehen, sondern versuchen, die neuen CMakeLists. txt und die alte ( die nicht erwähnt überhaupt SSE).

Die beste Option ist wahrscheinlich Intels zlib Gabel mit PCLMULQDQ Unterstützung beschrieben in dieses Papier . Diese Bibliothek hat auch die SSE 4.2 Optimierungen .

Wenn Sie keine Portabilität benötigen und Sie sind auf Linux können Sie die Implementierung der Kernel verwenden (die Hardware, wenn vorhanden beschleunigt wird):

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top