Незважаючи на те, що варіанти CRC можуть бути більш швидкими, ніж 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 .