这些字节是无符号的,并且都小于 16,因此它们可以放入一个半字节中。我目前正在循环中移动字节,并&
使用0xf
:
pub fn compress(offsets: [u8; 8]) -> u32 {
let mut co: u32 = 0;
for (i, o) in offsets.iter().enumerate() {
co |= ((*o as u32) & 0xf ) << (i * 4);
}
co
}
编译器已经对此做了一些很好的优化:
但也许可以做一些小操作或使用带有 a 的 SIMD 命令u64
来减少操作量?