CRC32 C或C ++实现

我正在寻找C或C ++的CRC32的实施,这是明确许可的,因为没有成本或公共领域。 这里的实现看起来不错,但是关于许可证的唯一的东西是“源代码”,这不够好。 我宁愿非LGPL,所以我不必愚弄一个DLL(我的应用程序是封闭的源代码)。 我在zlib中看到了adler32实现,但是我正在检查那些adler不适合的小块数据。

使用Boost C ++库 。 这里有一个CRC , 许可证是好的。

SNIPPETS C源代码档案有一个可以自由使用的CRC32实现 :

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

(不幸的是,c.snippets.org似乎已经死了,幸运的是, Wayback Machine已经存档了。)

为了能够编译代码,您需要为BYTE添加typedefs作为无符号的8位整数, DWORD作为无符号的32位整数,以及头文件crc.h & sniptype.h 。

头文件中唯一关键的项目就是这个macros(它本身就可以简单地放在CRC_32.c本身中:

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

我是指定链接的源代码的作者。 尽pipe源代码许可证的意图还不清楚(今天晚些时候),但是代码实际上是开放的,可以在免费或商业应用程序中免费使用,而不需要任何附加条件。

zlib(http://zlib.net/)中的crc代码是最快的,并且拥有非常宽松的开源许可证。;

除了速度比错误检测性能更重要的特殊应用之外,您不应该使用adler-32。

使用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是一个生成C CRC代码的Python脚本,可以selectCRC大小,algorithm和模型。

它根据MIT许可证发布。 这是可以接受的吗?

我find的最简单直接的实现是在这个页面底部的链接:

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

代码下载链接: https : //barrgroup.com/code/crc.zip

这是一个简单的独立实现,具有一个.h和一个.c文件。 通过使用一个定义,支持CRC32,CRC16和CRC_CCITT。 此外,如果您愿意,代码还允许用户更改参数设置,如CRC多项式,初始/最终XOR值和reflection选项。

LGPL或类似的许可证没有明确的定义。 然而,该网站确实表示,他们将代码放在公共领域以供任何使用。 实际的代码文件也这样说。

希望能帮助到你!

mhash库对我来说工作很好。 它足够快,支持多种types的哈希(crc32,MD5,SHA-1,HAVAL,RIPEMD128,RIPEMD160,TIGER,GOST等)。 要获得一个string的CRC32,你可以这样做:

  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 

SMHasher的rurban's fork (原来SMHasher似乎放弃了)有硬件CRC32的支持。 更改是在最初的提交之前添加的,但是尝试比较新的CMakeLists.txt和旧的 (没有提到SSE)。

最好的select可能是本文描述的Intel支持PCLMULQDQ的zlib fork 。 这个库也有SSE 4.2优化 。

如果您不需要可移植性,而且您使用的是Linux,则可以使用内核的实现(如果可用,则为硬件加速): https : //stackoverflow.com/a/11156040/309483

我在Checksum计算中遇到了这个有用的文章。

Dr.dobbs网站上的“用C ++计算CRC校验和”。

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