Embora possa haver opções mais rápidas que o CRC, se você usá-las, é provável que acabe sacrificando algum grau de capacidade de detecção de erros. Dependendo dos requisitos de detecção de erros, uma alternativa pode ser usar o código CRC otimizado para o seu aplicativo.
Para uma comparação do CRC com outras opções, consulte a excelente resposta de
Martin Thompson .
Uma opção para ajudar nisso é o pycrc, que é uma ferramenta (escrita em python 1 ) que pode gerar código-fonte C para dezenas de combinações de modelo e algoritmo crc . Isso permite otimizar a velocidade e o tamanho do seu próprio aplicativo, selecionando e comparando diferentes combinações. 1: Requer Python 2.6 ou posterior.
Ele suporta o crc-8
modelo , mas também suporta crc-5
, crc-16
e crc-32
entre outros. Quanto aos algoritmos , ele suporta bit-by-bit
, bit-by-bit-fast
e table-driven
.
Por exemplo (baixando o arquivo):
$ 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
Você pode até fazer coisas descoladas, como especificar usando pesquisas de mordidelas duplas (com uma tabela de pesquisa de 16 bytes) em vez de pesquisa de byte único, com tabela de pesquisa de 256 bytes.
Por exemplo (clonando o repositório 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 as restrições de memória e velocidade, essa opção pode ser o melhor compromisso entre velocidade e tamanho do código. A única maneira de ter certeza seria compará-lo.
O repositório pycrc git está no github , assim como seu rastreador de problemas , mas também pode ser baixado no sourceforge .