Rust中将切片内容转储到数组的惯用方法



我正在做这样的事情:

type HashId = [u8; 32];
fn fill_hash_id(hash_id: &mut HashId, hash_data: &[u8]) {
for i in 0..32 {
hash_id[i] = hash_data[i];
}
()
}

在Rust中有更好、更直接或更惯用的方法吗?

将对问题的评论扩展为完整答案:

slice方法copy_from_slice将起作用。

因为数组[T; N]实现了AsMut<[T]>*(也就是说,对T的可变数组的引用可以被视为T的可变切片(,所以可以在数组上调用此方法。

type HashId = [u8; 32];
fn main() {
let mut hash_id: HashId = [0u8; 32];
let hash_data = vec![1u8; 32];

hash_id.copy_from_slice(&hash_data);

println!("{:?}", &hash_id);
// bunch of '1's
}

但要小心;如果目标和接收器的长度不相同,copy_from_slice将死机。

*完全公开:[T; N]也实现了BorrowMut<T>,虽然我很确定AsMut是这里的特性,但我不能100%确定它不是BorrowMut

最新更新