Si bien puede haber opciones más rápidas que CRC, si las usa, es probable que termine sacrificando cierto grado de capacidad de detección de errores. Dependiendo de cuáles sean sus requisitos de detección de errores, una alternativa puede ser utilizar el código CRC optimizado para su aplicación.
Para una comparación de CRC con otras opciones, vea la excelente respuesta de
Martin Thompson .
Una opción para ayudar con esto es pycrc, que es una herramienta (escrita en python 1 ) que puede generar código fuente C para docenas de combinaciones de algoritmo y modelo crc . Esto le permite optimizar la velocidad y el tamaño para su propia aplicación seleccionando y comparando diferentes combinaciones. 1: Requiere Python 2.6 o posterior.
Es compatible con el crc-8
modelo , pero también es compatible crc-5
, crc-16
y crc-32
entre otros. En cuanto a los algoritmos , es compatible bit-by-bit
, bit-by-bit-fast
y table-driven
.
Por ejemplo (descargando el archivo):
$ 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
Incluso puede hacer cosas extravagantes, como especificar el uso de búsquedas de doble mordisco (con una tabla de búsqueda de 16 bytes) en lugar de una búsqueda de un solo byte, con una tabla de búsqueda de 256 bytes.
Por ejemplo (clonando el repositorio 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
Dadas sus limitaciones de memoria y velocidad, esta opción puede ser el mejor compromiso entre la velocidad y el tamaño del código. Sin embargo, la única forma de estar seguro sería compararlo.
El repositorio pycrc git está en github , al igual que su rastreador de problemas , pero también se puede descargar desde sourceforge .