【发布时间】:2020-10-21 04:51:43
【问题描述】:
如何从更大的数组中复制或引用字节切片?
我只需要阅读它们,但我希望指定大小以在编译时捕获错误。
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]。我如何帮助编译器看到这一点?
【问题讨论】:
-
对于这种特殊情况,我会这样做:
let mut bar = [0; 16]; bar.copy_from_slice(&foo[0..16]);.