Хотя могут быть более быстрые варианты, чем CRC, если вы их используете, вы, вероятно, в конечном итоге пожертвуете некоторой степенью возможности обнаружения ошибок. В зависимости от ваших требований к обнаружению ошибок, альтернативой может быть использование кода CRC, оптимизированного для вашего приложения.
Сравнение CRC с другими вариантами приведено в превосходном ответе
Мартина Томпсона .
Одним из способов помочь с этим является pycrc - инструмент (написанный на python 1 ), который может генерировать исходный код на C для десятков комбинаций модели и алгоритма crc . Это позволяет оптимизировать скорость и размер для вашего собственного приложения, выбирая и сравнивая различные комбинации. 1: требуется Python 2.6 или более поздняя версия.
Она поддерживает crc-8
модель , но и поддерживает crc-5
, crc-16
и crc-32
среди других. Что касается алгоритмов , он поддерживает bit-by-bit
, bit-by-bit-fast
и table-driven
.
Например (загрузка архива):
$ wget --quiet http://sourceforge.net/projects/pycrc/files/pycrc/pycrc-0.8/pycrc-0.8.tar.gz/download
$ tar -xf pycrc-0.8.tar.gz
$ cd pycrc-0.8
$ ./pycrc.py --model=crc-8 --algorithm=bit-by-bit --generate c -o crc8-byb.c
$ ./pycrc.py --model=crc-8 --algorithm=bit-by-bit-fast --generate c -o crc8-bybf.c
$ ./pycrc.py --model=crc-8 --algorithm=table-driven --generate c -o crc8-table.c
$ ./pycrc.py --model=crc-16 --algorithm=table-driven --generate c -o crc16-table.c
$ wc *.c
72 256 1790 crc8-byb.c
54 190 1392 crc8-bybf.c
66 433 2966 crc8-table.c
101 515 4094 crc16-table.c
293 1394 10242 total
Вы можете даже делать такие вещи, как указание, используя двойной поиск (с 16-байтовой таблицей поиска), а не однобайтовый поиск с 256-байтовой таблицей поиска.
Например (клонирование репозитория git):
$ git clone http://github.com/tpircher/pycrc.git
$ cd pycrc
$ git branch
* master
$ git describe
v0.8-3-g7a041cd
$ ./pycrc.py --model=crc-8 --algorithm=table-driven --table-idx-width=4 --generate c -o crc8-table4.c
$ wc crc8-table4.c
53 211 1562 crc8-table4.c
Учитывая ограничения памяти и скорости, эта опция может быть лучшим компромиссом между скоростью и размером кода. Единственный способ быть уверенным в том, чтобы проверить это, хотя.
Pycrc репозиторий на GitHub , как его отслеживания проблем , но он также может быть загружена с сайта SourceForge .