我正在寻找C或C++中CRC32的实现,明确许可为无成本或公共域.这里的实现似乎很好,但它对许可证的唯一说法是"源代码",这还不够好.我更喜欢非LGPL,所以我不必愚弄DLL(我的应用程序是封闭源代码).我在zlib中看到了adler32实现,但是我正在检查小块数据,这对adler来说并不好.
该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将它存档了.)
为了能够编译代码,您需要添加typedef BYTE
作为无符号8位整数和DWORD
无符号32位整数,以及头文件crc.h和sniptype.h.
标题中唯一的关键项是这个宏(它可以很容易地进入CRC_32.c本身:
#define UPDC32(octet, crc) (crc_32_tab[((crc) ^ (octet)) & 0xff] ^ ((crc) >> 8))
我是指定链接的源代码的作者.虽然源代码许可的意图不明确(将在今天晚些时候),但代码实际上是开放的,可以免费用于您的免费或商业应用程序,不附带任何附加条件.
使用Boost C++库.那里有一个CRC,许可证很好.
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):
#includeunsigned long crc = crc32(0L, Z_NULL, 0); crc = crc32(crc, (const unsigned char*)data_address, data_len);
pycrc是一个生成C CRC代码的Python脚本,可选择CRC大小,算法和模型.
它是在MIT许可下发布的.这对你的目的是否可以接受?