我有一个固定大小u8的数组 size 2048,它从不同长度的网络数据中填充。我需要将此数据复制到Vec大小u8等于接收长度的数据。
这就是我以前在 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)
Run Code Online (Sandbox Code Playgroud)
我知道Vec<T>implsFrom<[T; N]>并且可以使用该方法从数组创建它From::from(),但这需要整个大小2048,但我只想要data_len字节。
一个简单的
let vec = buff[..data_len].to_vec();
Run Code Online (Sandbox Code Playgroud)
如果你的类型是 就可以了Clone。
buff[..data_len]获取第一个元素的切片data_len,to_vec然后将该切片转换为Vec
如果不是,您可以使用 @Emoun 答案的变体:
let vec = buff.into_iter().take(data_len).collect::<Vec<_>>();
Run Code Online (Sandbox Code Playgroud)