CRC32 C 또는 C++ 구현
나는 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.*/
(불행히도 아마존닷컴은 사망한 것으로 보인다.다행히 웨이백 머신이 보관되어 있다.)
코드를 컴파일할 수 있으려면, 당신은 다음에 대한 타이핑을 추가해야 한다.BYTE
서명되지 않은 8비트 정수로,DWORD
헤더 파일 crc.h & sniptype.h와 함께 부호 없는 32비트 정수로.
헤더에서 유일한 중요한 항목은 이 매크로(CRC_32.c 자체에서 쉽게 이동할 수 있음:
#define UPDC32(octet, crc) (crc_32_tab[((crc) ^ (octet)) & 0xff] ^ ((crc) >> 8))
나는 지정된 링크에 있는 소스 코드의 작성자다.소스 코드 라이센스의 의도가 명확하지 않은 경우(오늘 이후가 될 예정) 코드는 실제로 열려 있고 아무런 조건 없이 무료 또는 상업용 애플리케이션에 사용할 수 있다.
Boost C++ 라이브러리를 사용하십시오.거기에 CRC가 포함되어 있고 면허증도 좋다.
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);
마쉬 도서관은 나에게 꽤 잘 어울린다.충분히 빠르고, 다양한 해싱 유형(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
zlib의 crc 코드(http://zlib.net/)는 가장 빠른 것 중 하나이며 매우 자유분방한 오픈 소스 라이센스를 가지고 있다.
그리고 에러 검출 성능보다 속도가 중요한 특수 응용 프로그램을 제외하고 adler-32를 사용해서는 안 된다.
내가 찾은 가장 간단하고 간단한 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 또는 이와 유사하다.그러나 이 사이트는 그들이 어떤 용도로든 공공 영역에 코드를 배치하고 있다고 말한다.실제 코드 파일에도 이런 말이 나온다.
도움이 되길 바래!
피 크랙는 CRC 코드를 생성하는 Python 스크립트로서, CRC 크기, 알고리즘 및 모델을 선택할 수 있는 옵션이 있다.
그것은 MIT 자격증으로 출시되었다.그것이 너의 목적에 합당한가?
루반의 SMHASher(원래 SMHASher가 버려진 것 같음) 포크는 하드웨어 CRC32를 지원한다.변경 사항은 초기 커밋 전에 추가되었지만 새 CMakeLists를 비교해 보십시오.txt 및 이전 버전(SSE는 전혀 언급되지 않음).
가장 좋은 옵션은 아마도 이 문서에서 설명한 PCLMULQDQ 지원을 포함한 인텔의 zlib 포크일 것이다.이 라이브러리에는 SSE 4.2 최적화도 있다.
이식성이 필요하지 않고 Linux에 있는 경우 커널의 구현(사용 가능한 경우 하드웨어 가속):https://stackoverflow.com/a/11156040/309483
참조URL: https://stackoverflow.com/questions/302914/crc32-c-or-c-implementation
'programing' 카테고리의 다른 글
Vuex-test-utils를 사용하여 구성 요소의 VueX 상태 변경을 테스트하는 방법 (0) | 2022.04.18 |
---|---|
검색되지 않은 TypeError: Vue.component가 함수가 아님 (0) | 2022.04.18 |
목록을 명시적으로 반복하지 않고 목록을 쉼표로 구분된 문자열로 변환하는 방법 (0) | 2022.04.17 |
excellent_text는 어떻게 작동하는가? (0) | 2022.04.17 |
모든 작업의 이름을 기억하지 않고 vuex 디스패치를 호출하고 디스패치에서 문자열로 보내는 방법 (0) | 2022.04.17 |