Я ищу реализацию CRC32 на C или С++, которая явно лицензирована как нецензурная или общедоступная. Реализация здесь кажется приятной, но единственное, что она говорит о лицензии, это "исходный код", что недостаточно. Я бы предпочел не LGPL, поэтому мне не нужно обманывать DLL (мое приложение закрыто). Я видел реализацию adler32 в zlib, но я проверяю небольшие фрагменты данных, для которых адлер не подходит.
Реализация CRC32 C или С++
Ответ 1
Используйте Boost С++ libraries. Здесь есть CRC, а license Хорошо.
Ответ 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, за исключением специальных приложений, где скорость важнее, чем производительность обнаружения ошибок.
Ответ 5
с помощью 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);
Ответ 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.