Es gibt zwar möglicherweise schnellere Optionen als CRC, aber wenn Sie diese verwenden, werden Sie wahrscheinlich ein gewisses Maß an Fehlererkennungsfähigkeit einbüßen. Abhängig von Ihren Anforderungen an die Fehlererkennung besteht eine Alternative darin, stattdessen einen für Ihre Anwendung optimierten CRC-Code zu verwenden.
Einen Vergleich von CRC mit anderen Optionen finden Sie in der hervorragenden Antwort von
Martin Thompson .
Eine Option, die dabei hilft, ist pycrc , ein Tool (in Python 1 geschrieben ), das C-Quellcode für Dutzende von Kombinationen aus crc-Modell und Algorithmus generieren kann . Auf diese Weise können Sie Geschwindigkeit und Größe für Ihre eigene Anwendung optimieren, indem Sie verschiedene Kombinationen auswählen und bewerten. 1: Benötigt Python 2.6 oder höher.
Es unterstützt das crc-8
Modell , sondern auch unterstützt crc-5
, crc-16
und crc-32
unter anderem. Wie für Algorithmen unterstützt sie bit-by-bit
, bit-by-bit-fast
und table-driven
.
Zum Beispiel (Herunterladen des Archivs):
$ 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
Sie können sogar irre Dinge wie das Festlegen mit Dual-Nibble-Lookups (mit einer 16-Byte-Lookup-Tabelle) anstelle von Single-Byte-Lookups (mit 256-Byte-Lookup-Tabelle) ausführen.
Zum Beispiel (Klonen des Git-Repository):
$ 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
Angesichts Ihrer Speicher- und Geschwindigkeitsbeschränkungen ist diese Option möglicherweise der beste Kompromiss zwischen Geschwindigkeit und Codegröße. Der einzige Weg, um sicher zu sein, wäre jedoch ein Benchmarking.
Das pycrc- Git-Repository befindet sich auf github , ebenso wie der Issue-Tracker , kann aber auch von sourceforge heruntergeladen werden .