我如何将rust&mut Peekable 更改为&[u8]?

问题描述 投票:1回答:1

我有一个关于在rust上使用类型的问题。我有一个类型为&mut Peekable<I>的值,我想将其用作其他函数的输入值,而该函数将获得类型为&[u8]的值。如何更改其类型?

rust
1个回答
0
投票
&[u8]是在内存中连续排列的字节切片。

所以您有两个问题:

    迭代器I可以是任何东西。假设您是从通用上下文(如I)中获得的foo<I: Iterator>(),则需要确保迭代器提供u8或可转换为u8的内容。
  1. Peekable后面的数据不必存在于内存中。可以从例如(0..1000)的范围创建,也可以在HashMap上迭代,该数据具有以随机方式散布的数据。您需要将其复制到可以保证连续布局的向量中。

  2. 首先,您需要使用u8声明要使用where I: Iterator<Item=u8>,或要求使用u8将类型转换为where I: Iterator<Item=impl Into<u8>>。然后,您将可以执行let iterator = iterator.map(|el| el.into())以获得u8元素的迭代器。

一旦有了,就可以将它们收集到一个向量中,并从中得到一个向量的切片:

let vec: Vec<u8> = iterator.collect(); let slice = &vec[..];

© www.soinside.com 2019 - 2024. All rights reserved.