我正在寻找 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的typedef添加为无符号的8位整数,并将DWORD添加为无符号的32位整数,以及头文件 crc.h <!>安培; sniptype.h

标题中唯一的关键项是这个宏(可以很容易地进入CRC_32.c本身:

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

我是指定链接的源代码的作者。虽然源代码许可证的意图不明确(将在今天晚些时候),但代码实际上是开放的,可以免费用于您的免费或商业应用程序,而且没有任何附加条件。

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脚本,选择CRC大小,算法和模型的选项。

它是在MIT许可下发布的。你的目的是否可以接受?

我发现的最简单直接的 C/C++ 实现位于本页底部的链接中:

网页: 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 值和反射选项。

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

希望能帮助到你!

mhash库对我来说非常有用。它足够快,支持多种类型的散列(crc32,MD5,SHA-1,HAVAL,RIPEMD128,RIPEMD160,TIGER,GOST等)。要获得字符串的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

rurban的SMHasher分支(最初的SMHasher似乎已被遗弃)具有硬件CRC32支持。在初始提交之前添加了更改,但尝试比较新的CMakeLists。 txt 旧的(根本没有提到SSE。

最佳选择可能是本文。该库也进行了SSE 4.2优化

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

我遇到了关于校验和计算的这篇有用的文章。

<!>“;在C ++中计算CRC校验和<!>”;在Dr.dobbs网站上。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top