0.1.0 |
|
---|
#6 in #crc-8
3KB
通用CRC算法的纯Rust实现
支持算法
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);
}
许可证
在以下许可证中选择一个:
- Apache License, Version 2.0 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT License (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
供您选择。