Question

Je recherche une implémentation de CRC32 en C ou C ++ qui est explicitement concédée sous licence, sans frais ni domaine public. La mise en œuvre ici semble bien, mais la seule chose qui est mentionnée à propos de la licence est "source" code ", ce qui ne suffit pas. Je préférerais que ce ne soit pas la LGPL, donc je n'ai pas à m'amuser avec une DLL (mon application est une source fermée). J'ai vu l'implémentation d'adler32 dans zlib, mais je vérifie de petits morceaux de données, pour lesquels adler n'est pas bon.

Était-ce utile?

La solution

Utilisez les bibliothèques Boost C ++ . Un CRC est inclus et le la licence est bonne.

Autres conseils

Le L'archive de code source SNIPPETS C a Implémentation CRC32 qui est librement utilisable:

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

(Malheureusement, c.snippets.org semble être mort. Heureusement, la Wayback Machine est archivée .)

Pour pouvoir compiler le code, vous devez ajouter les typedefs de BYTE en tant qu'entier non signé de 8 bits et DWORD en tant que non signé 32- bit entier, avec les fichiers d'en-tête crc.h & amp; sniptype.h .

Le seul élément critique dans l'en-tête est cette macro (qui pourrait tout aussi bien aller dans CRC_32.c elle-même:

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

Je suis l'auteur du code source sur le lien spécifié. Bien que l'intention de la licence du code source ne soit pas claire (ce sera plus tard aujourd'hui), le code est en fait ouvert et gratuit pour une utilisation dans vos applications gratuites ou commerciales, sans aucune condition.

Le code crc dans zlib (http://zlib.net/) est l’un des plus rapides au monde et possède une licence open source très libérale.

Et vous ne devriez pas utiliser adler-32, sauf pour les applications spéciales où la vitesse est plus importante que les performances de détection d'erreur.

en utilisant zlib.h ( 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 est un script Python qui génère du code C CRC, avec options pour sélectionner la taille, l'algorithme et le modèle du CRC.

Il est publié sous la licence MIT. Est-ce acceptable pour vos objectifs?

La mise en oeuvre C / C ++ la plus simple et la plus directe que j'ai trouvée est dans un lien au bas de cette page:

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

Lien de téléchargement de code: https://barrgroup.com/code/crc.zip

Il s’agit d’une simple implémentation autonome avec un fichier .h et un fichier .c. Il existe un support pour CRC32, CRC16 et CRC_CCITT via l'utilisation d'un define. En outre, le code permet à l'utilisateur de modifier les paramètres tels que le polynôme CRC, la valeur XOR initiale / finale et les options de réflexion, si vous le souhaitez.

La licence n'est pas explicitement définie en tant que LGPL ou similaire. Cependant, le site indique qu'il place le code dans le domaine public pour quelque utilisation que ce soit. Les fichiers de code eux-mêmes le disent également.

J'espère que ça aide!

La bibliothèque mhash fonctionne très bien pour moi. Il est assez rapide et prend en charge plusieurs types de hachage (crc32, MD5, SHA-1, HAVAL, RIPEMD128, RIPEMD160, TIGER, GOST, etc.). Pour obtenir le CRC32 d’une chaîne, vous feriez quelque chose comme ceci:

 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

le fork de SMHasher de Rurbban (le SMHasher d'origine semble abandonné) prend en charge le matériel CRC32. Les modifications ont été ajoutées avant la validation initiale, mais essayez de comparer le la nouvelle session de coloration txt et l'ancien ( qui ne mentionne pas du tout l'ESS).

La meilleure option est probablement la la fourchette zlib d'Intel avec prise en charge de PCLMULQDQ décrite dans ce document . Cette bibliothèque dispose également de la version SSE 4.2.5. >

Si vous n'avez pas besoin de portabilité et que vous êtes sous Linux, vous pouvez utiliser l'implémentation du noyau (accélérée matériellement si disponible): https://stackoverflow.com/a/11156040/309483

Je suis tombé sur cet article utile sur le calcul de la somme de contrôle.

"Calcul des sommes de contrôle CRC en C ++" sur le site de Dr.dobbs.

http://drdobbs.com/184403658?pgno=3

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top