2个版本
0.3.1 | 2023年2月26日 |
---|---|
0.3.0 | 2023年2月26日 |
0.2.1 |
|
0.2.0 |
|
在算法分类中排名第694
每月下载量21次
140KB
3.5K SLoC
crcxx
该crate使用多种方法计算CRC-8/16/32/64/128,包含的CRC参数目录简化了使用。适用于从小型嵌入式系统到现代桌面和服务器。没有不安全或架构特定代码。
不使用查找表,每步处理一个字节
最慢的方法。不需要额外的内存。
use crcxx::crc32::{*, catalog::CRC_32_BZIP2};
const CRC: Crc<NoLookupTable> =
Crc::<NoLookupTable>::new(&CRC_32_BZIP2);
fn main() {
// singlepart data.
let crc = CRC.compute(b"123456789");
assert_eq!(crc, 0xFC89_1918);
// Multipart data.
let mut multipart = CRC.compute_multipart();
multipart.update(b"1234");
multipart.update(b"5678");
multipart.update(b"9");
let crc = multipart.value();
assert_eq!(crc, 0xFC89_1918);
}
使用32个条目的查找表进行处理,每步处理一个字节
对于小型嵌入式设备,在速度和内存消耗之间取得良好平衡。根据使用场景,通常比前一种方法快2-5倍。
use crcxx::crc32::{*, catalog::CRC_32_BZIP2};
const CRC: Crc<LookupTable32> =
Crc::<LookupTable32>::new(&CRC_32_BZIP2);
fn main() {
// singlepart data.
let crc = CRC.compute(b"123456789");
assert_eq!(crc, 0xFC89_1918);
// Multipart data.
let mut multipart = CRC.compute_multipart();
multipart.update(b"1234");
multipart.update(b"5678");
multipart.update(b"9");
let crc = multipart.value();
assert_eq!(crc, 0xFC89_1918);
}
使用256个条目的查找表进行处理,每步处理一个字节
根据使用场景,通常比前一种方法快不超过2倍。
use crcxx::crc32::{*, catalog::CRC_32_BZIP2};
const CRC: Crc<LookupTable256> =
Crc::<LookupTable256>::new(&CRC_32_BZIP2);
fn main() {
// singlepart data.
let crc = CRC.compute(b"123456789");
assert_eq!(crc, 0xFC89_1918);
// Multipart data.
let mut multipart = CRC.compute_multipart();
multipart.update(b"1234");
multipart.update(b"5678");
multipart.update(b"9");
let crc = multipart.value();
assert_eq!(crc, 0xFC89_1918);
}
使用256 x SLICES个条目的查找表进行处理,每步处理多个字节
在无需使用架构特定指令的情况下,对于现代桌面和服务器上处理大量数据的最终方法。根据使用场景(更倾向于更大的块),通常比前一种方法快6倍。建议的切片数量为16。从16到32通常只有不到10%的改进。
use crcxx::crc32::{*, catalog::CRC_32_BZIP2};
const SLICES: usize = 16;
const CRC: Crc<LookupTable256xN<SLICES>> =
Crc::<LookupTable256xN<SLICES>>::new(&CRC_32_BZIP2);
fn main() {
// singlepart data.
let crc = CRC.compute(b"123456789");
assert_eq!(crc, 0xFC89_1918);
// Multipart data.
let mut multipart = CRC.compute_multipart();
multipart.update(b"1234");
multipart.update(b"5678");
multipart.update(b"9");
let crc = multipart.value();
assert_eq!(crc, 0xFC89_1918);
}
MSRV
当前的MSRV是1.59。请注意,官方crate策略是最新稳定版。
许可证
本项目根据Apache 2.0许可证授权。