如何从更大的数组中复制或引用字节片?
我只需要读取它们,但我希望指定大小以在编译时捕获错误。
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问题中也有一些关于自动执行此操作的讨论。