用零字节填充向量的最佳方法?

Gra*_*osi 9 rust

我需要发送一些消息(作为向量),并且它们需要以相同的长度发送。如果向量的长度不正确,我想用零填充向量。

假设我们需要所有有效负载的长度为 100。我想我可以使用该extend函数并执行如下操作:

let len = 100;
let mut msg = &[1,23,34].to_vec();
let  diff : usize = msg.len()-len;
let padding = [0;diff].to_vec();
msg.extend(padding);
Run Code Online (Sandbox Code Playgroud)

但这不会编译,因为编译器抱怨这diff不是一个常量。但对于我们正在尝试做的这个简单的事情来说,这似乎相当冗长。

有没有一种好的、简洁的方法来做到这一点?

Cha*_*man 14

您可以使用以下方法修复您的代码std::iter::repeat()

let len = 100;
let mut msg = vec![1, 23, 34];
let diff = len - msg.len();
msg.extend(std::iter::repeat(0).take(diff));
Run Code Online (Sandbox Code Playgroud)

但还有更好的方法 -Vec::resize()就是您所需要的:

let len = 100;
let mut msg = vec![1, 23, 34];
msg.resize(len, 0);
Run Code Online (Sandbox Code Playgroud)