문제

C 또는 C ++에서 CRC32의 구현을 찾고 있으며, 이는 비용이나 공개 도메인이없는 것으로 명시 적으로 라이센스가 부여됩니다. 구현 여기 좋아 보이지만 라이센스에 대해 말하는 유일한 것은 "소스 코드"입니다. 나는 비 LGPL을 선호하므로 DLL으로 바보가 필요하지 않습니다 (내 앱은 닫힌 소스입니다). Zlib에서 Adler32 구현을 보았지만 Adler가 좋지 않은 작은 데이터 덩어리를 확인하고 있습니다.

도움이 되었습니까?

해결책

사용 C ++ 라이브러리를 부스트하십시오. 이있다 CRC 거기에 포함되어 있습니다 특허 좋다.

다른 팁

그만큼 스 니펫 C 소스 코드 아카이브 a 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는 죽은 것 같습니다. 다행히도 웨이 백 머신 보관되어 있습니다.)

코드를 컴파일하려면 typedefs를 추가해야합니다. BYTE 서명되지 않은 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/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 CRC 크기, 알고리즘 및 모델을 선택할 수있는 옵션이 포함 된 C 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 값 및 원하는 경우 반사 옵션과 같은 매개 변수 설정을 변경할 수 있습니다.

라이센스는 ALA 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

Smhasher의 Rurban의 포크 (원래 Smhasher는 버려진 것 같습니다) 하드웨어 CRC32 지원이 있습니다. 초기 커밋 전에 변경 사항이 추가되었지만 비교해보십시오. 새로운 cmakelists.txt 그리고 오래된 것 (SSE를 전혀 언급하지 않음).

최선의 선택은 아마도입니다 pclmulqdq 지원을 가진 인텔의 Zlib 포크 설명합니다 이 종이. 이 도서관 SSE 4.2 최적화도 있습니다.

이식성이 필요하지 않고 Linux에있는 경우 커널 구현 (사용 가능한 경우 하드웨어 가속화)을 사용할 수 있습니다. https://stackoverflow.com/a/11156040/309483

체크섬 계산에 대한이 유용한 기사를 발견했습니다.

Dr.Dobbs 웹 사이트에서 "C ++의 CRC 체크섬 계산".

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top