如何将rust&mut Peekable <I>中的类型更改为&[u8]?

时间:2019-10-27 04:50:16

标签: rust

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

1 个答案:

答案 0 :(得分:2)

Peekable<I>是一个迭代器,它提供了它所包装的迭代器中的元素(带有一个可以在前面窥视的扭曲,但这在这里不相关)。

&[u8]是在内存中连续排列的一个字节片。

所以您有两个问题:

  1. 迭代器I可以是任何东西。假设您是从I之类的通用上下文中获得foo<I: Iterator>()的,则需要确保迭代器给出u8或可转换为u8的内容。

  2. Peekable之后的数据不必存在于内存中。可以从例如(0..1000)的范围中创建它,也可以在HashMap上进行迭代,其中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[..]; 元素的迭代器。

一旦有了这些,就可以将它们收集到一个向量中,并获得该向量的一部分:

<pre>

<?php

$newline = "\n";

$hit = 0;
$id = "id";
while ($hit < 10) { 
    $a = rand(0, 255);
    $b = rand(0, 255);
    $c = rand(0, 255);
    $d = rand(0, 255);

    $name = gethostbyaddr("$a.$b.$c.$d");

    if (!strpos($name, $id) === false) {
        print "  " . "<a href=$name>$name</a>" . $newline;
        $hit = $hit + 1;
    }
}

print $newline;
print "Copyright Search Engine" . $newline;
?>