mirror of
https://github.com/Momoko-Ayase/Senbei.git
synced 2026-09-19 03:57:59 -04:00
refactor: init
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
const fn build_table() -> [u32; 256] {
|
||||
let mut table = [0u32; 256];
|
||||
let mut i = 0;
|
||||
while i < 256 {
|
||||
let mut c = i as u32;
|
||||
let mut k = 0;
|
||||
while k < 8 {
|
||||
c = if c & 1 != 0 {
|
||||
0xEDB8_8320 ^ (c >> 1)
|
||||
} else {
|
||||
c >> 1
|
||||
};
|
||||
k += 1;
|
||||
}
|
||||
table[i] = c;
|
||||
i += 1;
|
||||
}
|
||||
table
|
||||
}
|
||||
|
||||
const TABLE: [u32; 256] = build_table();
|
||||
|
||||
pub fn append(initial: u32, data: &[u8]) -> u32 {
|
||||
let mut crc = !initial;
|
||||
for &b in data {
|
||||
crc = TABLE[((crc ^ b as u32) & 0xFF) as usize] ^ (crc >> 8);
|
||||
}
|
||||
!crc
|
||||
}
|
||||
|
||||
pub fn compute(data: &[u8]) -> u32 {
|
||||
append(0, data)
|
||||
}
|
||||
Reference in New Issue
Block a user