有没有一种方法可以将大小为Vec<T>
的{{1}}转换为S
类型的数组?具体来说,我使用的函数返回128位散列作为[T; S]
,其长度始终为16,我想将散列作为Vec<u8>
处理。
是否有内置类似于[u8, 16]
方法的东西给了我想要的东西,或者我应该编写自己的函数来分配固定大小的数组,迭代复制每个元素的向量,并返回数组?
答案 0 :(得分:15)
[S]我应该编写自己的函数来分配一个固定大小的数组,迭代复制每个元素的向量,并返回数组吗?
是的,这是你应该做的。
在向量上设置方法提供此方法并不合理,因为您目前无法对数组的长度进行参数化。这意味着每个大小都需要是一个专门的实现(尽管宏将有助于样板)。此外,必须完全初始化数组,因此当您将具有太多或太少元素的向量转换为数组时,您很快就会担心该怎么做。
为了完整起见,这里有一个小例子:
fn from_slice(bytes: &[u8]) -> [u8; 32] {
let mut array = [0; 32];
let bytes = &bytes[..array.len()]; // panics if not enough data
array.copy_from_slice(bytes);
array
}
如果您的类型未实现Copy
,则无法使用copy_from_slice
,因此您必须使用clone_from_slice
。