【问题标题】:How to initialize a Vec from a subset of an array?如何从给定大小的数组中初始化 vec
【发布时间】:2022-12-03 01:43:07
【问题描述】:

我有一个固定大小的 u8 大小为 2048 的数组,它从不同长度的网络数据中填充。我需要将此数据复制到 u8vec,其大小等于接收到的长度。

这就是我以前在 C++ 中的做法

char buff[2048];
ssize_t data_len = recvfrom(socket, buff, sizeof(buff), 0, nullptr, nullptr);

std::vector<char> vec_buff(buff, buff + data_len)

我知道 Vec&lt;T&gt; impls From&lt;[T; N]&gt; 并且可以使用 From::from() 方法从数组创建它,但这占用了 2048 的整个大小,但我只想要 data_len 字节。

【问题讨论】:

    标签: rust


    【解决方案1】:

    一个简单的

    buff[..data_len].to_vec()
    

    会做。 buff[..data_len] 获取第一个data_len 元素的一部分,to_vec 然后将该部分变成Vec

    【讨论】:

      【解决方案2】:

      你可以使用Iterator::take

      let array: [u8;2048] = ..;
      let data_vec: Vec<_> = array.iter().cloned().taken(data_len).collect();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-12-20
        • 2011-06-12
        • 2021-11-10
        • 1970-01-01
        • 2013-04-16
        • 2021-09-01
        • 2018-10-21
        • 1970-01-01
        相关资源
        最近更新 更多