33 个稳定版本
2.5.0 | 2024 年 5 月 1 日 |
---|---|
2.4.4 | 2023 年 12 月 20 日 |
2.4.3 | 2022 年 5 月 20 日 |
2.4.2 | 2022 年 3 月 5 日 |
1.1.2 | 2018 年 11 月 13 日 |
#27 在 算法 中
68,152 每月下载量
用于 126 个 crate (29 直接)
240KB
2K SLoC
CRC Any
通过提供位数长度、表达式、反射、初始值和最终异或值来计算 CRC 值。它具有许多内置的 CRC 函数。
用法
您可以使用 create_crc
关联函数通过提供位数长度、表达式、反射、初始值和最终异或值来创建一个 CRC 实例。例如,如果您想计算 CRC-24 值。
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());
为了简化使用,已经内置了几个常见的 CRC 版本的计算函数。
- 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
- 在
mhash
中也称为crc32b
。
- 在
- crc32mhash
mhash
是一个常见的库,它有两个奇特的 CRC32 版本,分别称为crc32
和crc32b
。在这个模块中的crc32
和crc32mhash
分别是 mhash 中的crc32b
和crc32
。
- crc32bzip2
- crc32c
- crc32d
- crc32mpeg2
- crc32posix
- crc32q
- crc32jamcrc
- crc32xfer
- crc40gsm
- crc64
- crc64iso
- crc64we
- crc64jones
例如,
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());
在获取CRC值后,您仍然可以使用digest
方法继续计算下一个CRC值。
堆内存支持
为了确保这个crate不会使用堆内存分配,您可以禁用默认功能。
[dependencies.crc-any]
version = "*"
default-features = false
这样做之后,get_crc_vec_be
和get_crc_vec_le
方法将无法使用。但如果您仍然需要这个crate返回一个没有动态分配的Vec
,您可以通过启用heapless
功能来使get_crc_heapless_vec_be
和get_crc_heapless_vec_le
方法可用。
[dependencies.crc-any]
version = "*"
default-features = false
features = ["heapless"]
Crates.io
https://crates.io/crates/crc-any