#crc #crc-8 #crc32 #crc64 #crc16

无 std crc_all

通用 CRC 算法的纯 Rust 实现

3 个不稳定版本

0.2.2 2022年5月1日
0.2.1 2022年5月1日
0.2.0 2019年7月29日
0.1.0 2019年3月4日

571算法

Download history 283/week @ 2024-04-22 506/week @ 2024-04-29 315/week @ 2024-05-06 341/week @ 2024-05-13 367/week @ 2024-05-20 482/week @ 2024-05-27 704/week @ 2024-06-03 1280/week @ 2024-06-10 1102/week @ 2024-06-17 681/week @ 2024-06-24 2102/week @ 2024-07-01 1610/week @ 2024-07-08 904/week @ 2024-07-15 604/week @ 2024-07-22 898/week @ 2024-07-29 925/week @ 2024-08-05

每月下载量 3,646
6crate(5 个直接使用)中使用

MIT/Apache

13KB
146

通用 CRC 算法的纯 Rust 实现

Crates.io

支持的算法

CRC-3/GSM,CRC-3/ROHC,CRC-4/G-704,CRC-4/INTERLAKEN,CRC-5/EPC-C1G2,CRC-5/G-704,CRC-5/USB,CRC-6/CDMA2000-A, CRC-6/CDMA2000-B,CRC-6/DARC,CRC-6/G-704,CRC-6/GSM,CRC-7/MMC,CRC-7/ROHC,CRC-7/UMTS,CRC-8/AUTOSAR, CRC-8/BLUETOOTH,CRC-8/CDMA2000,CRC-8/DARC,CRC-8/DVB-S2,CRC-8/GSM-A,CRC-8/GSM-B,CRC-8/I-432-1, CRC-8/I-CODE,CRC-8/LTE,CRC-8/MAXIM-DOW,CRC-8/NRSC-5,CRC-8/OPENSAFETY,CRC-8/ROHC,CRC-8/SAE-J1850, CRC-8/SMBUS,CRC-8/TECH-3250,CRC-8/WCDMA,CRC-10/ATM,CRC-10/CDMA2000,CRC-10/GSM,CRC-11/FLEXRAY, CRC-11/UMTS,CRC-12/CDMA2000,CRC-12/DECT,CRC-12/GSM,CRC-12/UMTS,CRC-13/BBC,CRC-14/DARC,CRC-14/GSM, CRC-15/CAN,CRC-15/MPT1327,CRC-16/ARC,CRC-16/CDMA2000,CRC-16/CMS,CRC-16/DDS-110,CRC-16/DECT-R, CRC-16/DECT-X,CRC-16/DNP,CRC-16/EN-13757,CRC-16/GENIBUS,CRC-16/GSM,CRC-16/IBM-3740,CRC-16/IBM-SDLC, CRC-16/ISO-IEC-14443-3-A,CRC-16/KERMIT,CRC-16/LJ1200,CRC-16/MAXIM-DOW,CRC-16/MCRF4XX,CRC-16/MODBUS, CRC-16/NRSC-5,CRC-16/OPENSAFETY-A,CRC-16/OPENSAFETY-B,CRC-16/PROFIBUS,CRC-16/RIELLO,CRC-16/SPI-FUJITSU, CRC-16/T10-DIF,CRC-16/TELEDISK,CRC-16/TMS37157,CRC-16/UMTS,CRC-16/USB,CRC-16/XMODEM,CRC-17/CAN-FD, CRC-21/CAN-FD,CRC-24/BLE,CRC-24/FLEXRAY-A,CRC-24/FLEXRAY-B,CRC-24/INTERLAKEN,CRC-24/LTE-A,CRC-24/LTE-B, CRC-24/OPENPGP,CRC-24/OS-9,CRC-30/CDMA,CRC-31/PHILIPS,CRC-32/AIXM,CRC-32/AUTOSAR,CRC-32/BASE91-D, CRC-32/BZIP2,CRC-32/CKSUM,CRC-32/ISCSI,CRC-32/ISO-HDLC,CRC-32/JAMCRC,CRC-32/MPEG-2,CRC-32/XFER, CRC-40/GSM,CRC-64/ECMA-182,CRC-64/GO-ISO,CRC-64/WE,CRC-64/XZ,CRC-82/DARC

CRC.txt

注意: CRC-12/UMTS 需要进行特殊操作,见 tests/tests.rs

用法

crc_all 添加到 Cargo.toml

[dependencies]
crc_all = "0.2.2"

示例

use crc_all::CrcAlgo;

fn crc11_umts(data: &[u8]) -> u16 {
    const CRC11_UMTS: CrcAlgo<u16> = CrcAlgo::<u16>::new(0x307, 11, 0, 0, false);

    let crc = &mut 0u16;
    CRC11_UMTS.init_crc(crc);
    CRC11_UMTS.update_crc(crc, data)
}

fn main() {
    assert_eq!(crc11_umts(b"123456789".as_ref()), 0x061);
}
use crc_all::Crc;

fn main() {
    let data = b"123456789".as_ref();
    let mut crc5_usb = Crc::<u8>::new(0x05, 5, 0x1f, 0x1f, true);

    assert_eq!(crc5_usb.update(data), 0x19);
    assert_eq!(crc5_usb.update(data), 0x03);

    crc5_usb.init();
    assert_eq!(crc5_usb.update(data), 0x19);
}

许可证

根据您的要求,许可协议可以是以下之一:

无运行时依赖