4个稳定版本
1.0.6 | 2023年2月24日 |
---|---|
1.0.5 | 2023年2月23日 |
1.0.4 | 2022年9月20日 |
1.0.2 |
|
0.1.0 |
|
在 #hasher 中排名 75
每月下载 28 次
78KB
961 行
按8分割不加载标准库(即 #![no_std]
)
状态
目录
介绍
slice-by-8软件包提供了使用改进的英特尔Slice-by-8算法执行CRC哈希的函数。如果需要使用自己的查找表,该软件包提供了slice-by-8算法,它接受查找表作为参数。该软件包还提供了在 slice_by_8::crc32
中可用的CRC32(多项式 0x04c11db7
)以及在 slice_by_8::crc32c
中的CRC32c(多项式 0x1EDC6F41
)。如果启用,CRC32c哈希可以使用CRC32c内联函数。您可以通过启用 sse4.2
目标功能在 x86_64
target_arch上启用内联版本,或者在 aarch64
target_arch上通过启用 crc
目标功能。
使用方法
使用哈希器
use slice_by_8::crc32::CRC32BuildHasher;
use std::collections::HashMap;
const KEY: &str = "hash";
const VALUE: &str = "me!";
// Create a HashMap that use CRC32Hasher to hash keys
let mut map = HashMap::with_hasher(CRC32BuildHasher::default());
map.insert(KEY, VALUE);
assert_eq!(map.get(&KEY), Some(&VALUE));
使用slice-by-8函数
slice-by-8提供了对字节切片进行哈希的函数。
use slice_by_8::crc32c;
const HASH_ME: &[u8] = b"abcdefghijklmnopqrstuvwxyz";
assert_eq!(crc32c::slice_by_8(HASH_ME), 0x9EE6EF25);
注意: slice_by_8
与 slice_by_8_with_seed
类似,其中 seed
等于 0
。
使用自己的查找表
您自己的查找表必须是 [[u32; 256]; 8]
。
use slice_by_8::slice_by_8;
let my_lookup_table: [[u32; 256]; 8] = slice_by_8::generate_table(slice_by_8::crc32::POLYNOMIAL);
const HASH_ME: &[u8] = b"abcdefghijklmnopqrstuvwxyz";
assert_eq!(slice_by_8(HASH_ME, &my_lookup_table), 0x4C2750BD);
生成查找表
该软件包提供 generate_table
函数,可以从多项式生成查找表。
use slice_by_8::generate_table;
use slice_by_8::{crc32, crc32c};
assert_eq!(generate_table(crc32::POLYNOMIAL), crc32::LOOKUP_TABLE);
assert_eq!(generate_table(crc32c::POLYNOMIAL), crc32c::LOOKUP_TABLE);
性能
改进基于
无运行时依赖
~180KB