当前位置:  开发笔记 > 编程语言 > 正文

CRC32 C或C++实现

如何解决《CRC32C或C++实现》经验,为你挑选了6个好方法。

我正在寻找C或C++中CRC32的实现,明确许可为无成本或公共域.这里的实现似乎很好,但它对许可证的唯一说法是"源代码",这还不够好.我更喜欢非LGPL,所以我不必愚弄DLL(我的应用程序是封闭源代码).我在zlib中看到了adler32实现,但是我正在检查小块数据,这对adler来说并不好.



1> cjm..:

该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))


@LightnessRacesinOrbit,你做错了.我得到'0x3BF5092E`.我真棒的通灵调试技巧告诉我,如果你将`oldcrc32`初始化为'0`而不是像你应该的那样`0xFFFFFFFF`,那么就会出现`0x27809EA7`.
我在这里找到了:http://www.opensource.apple.com/source/xnu/xnu-1456.1.26/bsd/libkern/crc32.c
哦,这些片段很好!遗憾的是,这个网站不再存在.我把CRC函数放到github上的一个小项目中:https://github.com/panzi/CRC-and-checksum-functions我也做了一些小改动(使用C99`uint32_t`代替`DWORD`等修复一些警告).也许应该将所有这些片段拯救到github项目中?

2> NTDLS..:

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


如果有人关心你的代码节拍提升......在我使用boost :: crc_32_type时测试16s vs 25s

3> Zan Lynx..:

使用Boost C++库.那里有一个CRC,许可证很好.


如果您已经在使用boost库,那么使用boost是有意义的.否则就像用鸟类射击一样 - 这绝对可以做到,但是没有任何意义.
#include //对于BOOST_STATIC_CONSTANT等.#include //对于boost :: uint_t前两行拖动另外两个头文件?无尽的沼泽?

4> Mark Adler..:

zlib(http://zlib.net/)中的crc代码是最快的,并且具有非常自由的开源许可证.

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



5> giuspen..:

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

#include 
unsigned long  crc = crc32(0L, Z_NULL, 0);
crc = crc32(crc, (const unsigned char*)data_address, data_len);



6> John Carter..:

pycrc是一个生成C CRC代码的Python脚本,可选择CRC大小,算法和模型.

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


@ i486,请重新阅读我的答案 - "**生成C CRC代码**" - pycrc的输出是C源代码.
推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有