Chociaż mogą istnieć szybsze opcje niż CRC, jeśli ich użyjesz, prawdopodobnie poświęcisz w pewnym stopniu zdolność wykrywania błędów. W zależności od wymagań dotyczących wykrywania błędów alternatywą może być użycie zoptymalizowanego dla aplikacji kodu CRC.
Aby porównać CRC z innymi opcjami, zobacz doskonałą odpowiedź
Martina Thompsona .
Jedną z opcji, która może w tym pomóc, jest pycrc, które jest narzędziem (napisanym w Pythonie 1 ), które może generować kod źródłowy C dla wielu kombinacji modelu CRC i algorytmu . Pozwala to zoptymalizować szybkość i rozmiar dla własnej aplikacji, wybierając i porównując różne kombinacje. 1: Wymaga języka Python 2.6 lub nowszego.
Wspiera crc-8
modelu , ale również obsługuje crc-5
, crc-16
a crc-32
między innymi. Co do algorytmów , obsługuje bit-by-bit
, bit-by-bit-fast
i table-driven
.
Na przykład (pobieranie archiwum):
$ 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
Możesz nawet wykonywać funky, takie jak określanie, używając podwójnych odnośników (z 16-bajtową tablicą przeglądową) zamiast wyszukiwania jednobajtowego z 256-bajtową tablicą przeglądową.
Na przykład (klonowanie repozytorium 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
Biorąc pod uwagę pamięć i ograniczenia prędkości, ta opcja może być najlepszym kompromisem między prędkością a rozmiarem kodu. Jedynym sposobem, aby się upewnić, byłaby analiza porównawcza.
Pycrc repozytorium git jest github , jak jest jego tracker problem , ale można go również pobrać z SourceForge .