【问题标题】:How to copy or reference a slice of bytes? [duplicate]如何复制或引用一片字节? [复制]
【发布时间】: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(&amp;foo[0..16]);.

标签: arrays rust slice


【解决方案1】:

你的问题不在于你不能引用一个字节片;就是切片不是数组。

您可能想要the arrayref cratethe TryInto trait。还有一些关于自动执行此操作的讨论in this Github issue.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-08
    • 2020-11-15
    • 2021-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-02
    • 2018-09-06
    相关资源
    最近更新 更多