33 stable releases
| 2.5.0 | May 1, 2024 |
|---|---|
| 2.4.4 | Dec 20, 2023 |
| 2.4.3 | May 20, 2022 |
| 2.4.2 | Mar 5, 2022 |
| 1.1.2 | Nov 13, 2018 |
#28 in Algorithms
370,885 downloads per month
Used in 162 crates
(33 directly)
240KB
2K
SLoC
CRC Any
To compute CRC values by providing the length of bits, expression, reflection, an initial value and a final xor value. It has many built-in CRC functions.
Usage
You can use create_crc associated function to create a CRC instance by providing the length of bits, expression, reflection, an initial value and a final xor value. For example, if you want to compute a CRC-24 value.
use crc_any::CRC;
let mut crc24 = CRC::create_crc(0x0000000000864CFB, 24, 0x0000000000B704CE, 0x0000000000000000, false);
crc24.digest(b"hello");
assert_eq!([71, 245, 138].to_vec(), crc24.get_crc_vec_be());
assert_eq!("0x47F58A", &crc24.to_string());
To simplify the usage, there are several common versions of CRC whose computing functions are already built-in.
- crc3gsm
- crc4itu
- crc4interlaken
- crc5epc
- crc5itu
- crc5usb
- crc6cdma2000_a
- crc6cdma2000_b
- crc6darc
- crc6gsm
- crc6itu
- crc7
- crc7umts
- crc8
- crc8cdma2000
- crc8darc
- crc8dvb_s2
- crc8ebu
- crc8icode
- crc8itu
- crc8maxim
- crc8rohc
- crc8wcdma
- crc10
- crc10cdma2000
- crc10gsm
- crc11
- crc12
- crc12cdma2000
- crc12gsm
- crc13bbc
- crc14darc
- crc14gsm
- crc15can
- crc15mpt1327
- crc16
- crc16ccitt_false
- crc16aug_ccitt
- crc16buypass
- crc16cdma2000
- crc16dds_110
- crc16dect_r
- crc16dect_x
- crc16dnp
- crc16en_13757
- crc16genibus
- crc16maxim
- crc16mcrf4cc
- crc16riello
- crc16t10_dif
- crc16teledisk
- crc16tms13157
- crc16usb
- crc_a
- crc16kermit
- crc16modbus
- crc16_x25
- crc16xmodem
- crc17can
- crc21can
- crc24
- crc24ble
- crc24flexray_a
- crc24flexray_b
- crc24lte_a
- crc24lte_b
- crc24os9
- crc30cdma
- crc32
- It also called
crc32binmhash.
- It also called
- crc32mhash
mhashis a common library which has two weird versions of CRC32 calledcrc32andcrc32b.crc32andcrc32mhashin this module arecrc32bandcrc32in mhash respectively.
- crc32bzip2
- crc32c
- crc32d
- crc32mpeg2
- crc32posix
- crc32q
- crc32jamcrc
- crc32xfer
- crc40gsm
- crc64
- crc64iso
- crc64we
- crc64jones
For instance,
use crc_any::CRC;
let mut crc64 = CRC::crc64();
crc64.digest(b"hello");
assert_eq!([64, 84, 74, 48, 97, 55, 182, 236].to_vec(), crc64.get_crc_vec_be());
assert_eq!("0x40544A306137B6EC", &crc64.to_string());
After getting a CRC value, you can still use the digest method to continue computing the next CRC values.
Heapless Support
To make sure this crate will not use heap memory allocation, you can disable the default features.
[dependencies.crc-any]
version = "*"
default-features = false
After doing that, the get_crc_vec_be and get_crc_vec_le methods can not be used. But if you still need this crate to return a Vec without dynamic allocation, you can enable the heapless feature to make the get_crc_heapless_vec_be and get_crc_heapless_vec_le methods available.
[dependencies.crc-any]
version = "*"
default-features = false
features = ["heapless"]
Crates.io
https://crates.io/crates/crc-any
Documentation
License
Dependencies
~155KB