Подтвердить что ты не робот

Реализация CRC32 C или С++

Я ищу реализацию CRC32 на C или С++, которая явно лицензирована как нецензурная или общедоступная. Реализация здесь кажется приятной, но единственное, что она говорит о лицензии, это "исходный код", что недостаточно. Я бы предпочел не LGPL, поэтому мне не нужно обманывать DLL (мое приложение закрыто). Я видел реализацию adler32 в zlib, но я проверяю небольшие фрагменты данных, для которых адлер не подходит.

4b9b3361

Ответ 2

Архив исходного кода 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, похоже, умер. К счастью, crc.h и sniptype.h.

Единственным критическим элементом в заголовке является этот макрос (который так же легко можно было бы использовать в самом CRC_32.c:

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

Ответ 3

Я являюсь автором исходного кода по указанной ссылке. Хотя намерение лицензии на исходный код не ясна (это будет позже сегодня), код фактически открыт и свободен для использования в ваших бесплатных или коммерческих приложениях без каких-либо привязок.

Ответ 4

Код crc в zlib (http://zlib.net/) является одним из самых быстрых и имеет очень либеральную лицензию с открытым исходным кодом.

И вы не должны использовать adler-32, за исключением специальных приложений, где скорость важнее, чем производительность обнаружения ошибок.

Ответ 6

pycrc - это Python script, который генерирует C CRC-код, с опциями для выбора размера CRC, алгоритм и модель.

Он выпущен под лицензией MIT. Это приемлемо для ваших целей?

Ответ 7

Самая простая и понятная реализация 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 или подобный. Однако сайт говорит, что они размещают код в открытом доступе для любого использования. Фактические файлы кода также говорят это.

Надеюсь, поможет!

Ответ 8

библиотека 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

Ответ 9

rurban fork SMHasher (оригинальный SMHasher кажется заброшенным) имеет аппаратную поддержку CRC32. Изменения были добавлены до первоначального коммита, но попробуйте сравнить новый CMakeLists.txt и старый (который вообще не упоминает SSE).

Лучшим вариантом является, вероятно, вилка Intel zlib с поддержкой PCLMULQDQ, описанная в этот документ. Эта библиотека также имеет оптимизацию SSE 4.2.

Если вам не нужна переносимость, и вы работаете в Linux, вы можете использовать реализацию ядра (которая будет аппаратно ускорена, если она доступна): fooobar.com/questions/107082/...

Ответ 10

Я наткнулся на эту полезную статью о расчете Checksum.

"Расчет контрольных сумм CRC на С++" на веб-сайте Dr.dobbs.

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