我正在编写代码,处理64字节块,并且我想在类型级别上强制执行此大小:
fn f(buf: &[u8; 64]) { ... }
然而,数据以切片&[u8]
的形式传入。因此,我想能够将其分成子空间并转换为&[u8; 64]
。结果证明以下转换有效:
let buf = (0..32).collect::<Vec<u8>>();
let z: &[u8; 32] = &(&buf[..]).try_into().unwrap();
但以下内容不行:
let buf = (0..64).collect::<Vec<u8>>();
let z: &[u8; 64] = &(&buf[..]).try_into().unwrap();
当转换的大小在0到32之间时,可以进行转换,但对于大于32的大小则不行。我该如何在不手动复制数据的情况下启用 &[u8]
-> &[u8; 64]
的转换?
struct TryFromSliceError;
并使用Err(TryFromSliceError)
创建一个实例,这样你就不需要将单元类型作为结构体成员。 - undefined