如何复制或引用字节切片?



如何从更大的数组中复制或引用字节片?

我只需要读取它们,但我希望指定大小以在编译时捕获错误。

let foo = rand::thread_rng().gen::<[u8; 32]>();
let bar: [u8; 16] = foo[0..16];
let baz: &[u8; 16] = &foo[16..32];

错误是:

error[E0308]: mismatched types
--> src/main.rs:64:22
|
64 |     let bar: [u8; 16] = foo[0..16];
|              --------   ^^^^^^^^^^ expected array `[u8; 16]`, found slice `[u8]`
|              |
|              expected due to this

error[E0308]: mismatched types
--> src/main.rs:65:23
|
65 |     let baz: &[u8; 16] = &foo[16..32];
|              ---------   ^^^^^^^^^^^^ expected array `[u8; 16]`, found slice `[u8]`
|              |
|              expected due to this
|
= note: expected reference `&[u8; 16]`
found reference `&[u8]`

我可以看到foo[0..16]正好是 16 个字节,而不是一段长度未知的切片[u8]. 如何帮助编译器看到这一点?

你的问题不是你不能引用字节片;而是片不是数组。

可能你想要 arrayref 板条箱或TryInto特征。在这个Github问题中也有一些关于自动执行此操作的讨论。

最新更新