Sebbene possano esistere opzioni più veloci rispetto al CRC, se le utilizzi, è probabile che finisca per sacrificare un certo grado di capacità di rilevamento degli errori. Un'alternativa potrebbe essere quella di utilizzare il codice CRC ottimizzato per la tua applicazione.
Un'opzione per aiutarti è pycrc che è uno strumento (scritto in python < sup> 1 ) che può generare codice sorgente C per dozzine di combinazioni di modello crc e algoritmo . Ciò consente di ottimizzare la velocità e le dimensioni della propria applicazione selezionando e confrontando diverse combinazioni. 1: Richiede Python 2.6 o versioni successive.
Supporta il crc-8
modello , ma supporta anche crc-5
, crc-16
e crc-32
tra gli altri. Per quanto riguarda gli algoritmi , supporta bit-by-bit
, bit-by-bit-fast
e table-driven
.
Ad esempio (download dell'archivio):
$ 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
Puoi anche fare cose funky come specificare usando le ricerche dual nibble (con una tabella di ricerca a 16 byte) piuttosto che la ricerca a byte singolo, con una tabella di ricerca a 256 byte.
Ad esempio (clonazione del repository 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
Dati i limiti di memoria e velocità, questa opzione potrebbe essere il miglior compromesso tra velocità e dimensioni del codice. L'unico modo per essere sicuri sarebbe di benchmark però.
Il repository git pycrc si trova su github , così come il suo issue tracker , ma può anche essere scaricato da sourceforge .