Mặc dù có thể có các tùy chọn nhanh hơn CRC, nhưng nếu bạn sử dụng chúng thì có khả năng bạn sẽ hy sinh một số mức độ khả năng phát hiện lỗi. Tùy thuộc vào yêu cầu phát hiện lỗi của bạn là gì, một giải pháp thay thế có thể là sử dụng mã CRC được tối ưu hóa cho ứng dụng của bạn.
Để so sánh CRC với các lựa chọn khác, hãy xem câu trả lời xuất sắc của
Martin Thompson .
Một tùy chọn để trợ giúp điều này là pycrc là một công cụ (được viết bằng python 1 ) có thể tạo mã nguồn C cho hàng tá kết hợp mô hình và thuật toán crc . Điều này cho phép bạn tối ưu hóa tốc độ và kích thước cho ứng dụng của riêng bạn bằng cách chọn và điểm chuẩn các kết hợp khác nhau. 1: Yêu cầu Python 2.6 trở lên.
Nó hỗ trợ crc-8
mô hình , nhưng cũng hỗ trợ crc-5
, crc-16
và crc-32
trong số những người khác. Đối với các thuật toán , nó hỗ trợ bit-by-bit
, bit-by-bit-fast
và table-driven
.
Ví dụ: (tải xuống kho lưu trữ):
$ 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
Bạn thậm chí có thể thực hiện những điều thú vị như chỉ định bằng cách sử dụng tra cứu nibble kép (với bảng tra cứu 16 byte) thay vì tra cứu byte đơn, với bảng tra cứu 256 byte.
Ví dụ: (nhân bản kho 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
Với các hạn chế về bộ nhớ và tốc độ của bạn, tùy chọn này có thể là sự thỏa hiệp tốt nhất giữa tốc độ và kích thước mã. Cách duy nhất để chắc chắn sẽ là điểm chuẩn mặc dù.
Các pycrc kho git là trên github , như là nó theo dõi vấn đề , nhưng nó cũng có thể được tải về từ SourceForge .