我需要发送一些消息(作为向量),并且它们需要以相同的长度发送。如果向量的长度不正确,我想用零填充向量。
假设我们需要所有有效负载的长度为 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)