#crc #crc32 #hash #crc16 #crc64

no-std crc-any

通过提供位数长度、表达式、反射、初始值和最终异或值来计算 CRC 值。它具有许多内置的 CRC 函数。

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算法

Download history 15618/week @ 2024-05-03 13874/week @ 2024-05-10 13844/week @ 2024-05-17 13320/week @ 2024-05-24 13598/week @ 2024-05-31 13353/week @ 2024-06-07 14127/week @ 2024-06-14 15316/week @ 2024-06-21 12788/week @ 2024-06-28 14126/week @ 2024-07-05 15940/week @ 2024-07-12 16877/week @ 2024-07-19 15168/week @ 2024-07-26 15444/week @ 2024-08-02 17179/week @ 2024-08-09 17467/week @ 2024-08-16

68,152 每月下载量
用于 126 个 crate (29 直接)

MIT 许可证

240KB
2K SLoC

CRC Any

CI

通过提供位数长度、表达式、反射、初始值和最终异或值来计算 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 版本,分别称为 crc32crc32b。在这个模块中的 crc32crc32mhash 分别是 mhash 中的 crc32bcrc32
  • 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_beget_crc_vec_le方法将无法使用。但如果您仍然需要这个crate返回一个没有动态分配的Vec,您可以通过启用heapless功能来使get_crc_heapless_vec_beget_crc_heapless_vec_le方法可用。

[dependencies.crc-any]
version = "*"
default-features = false
features = ["heapless"]

Crates.io

https://crates.io/crates/crc-any

文档

https://docs.rs/crc-any

许可证

MIT

依赖项