将向量分成块时,如何优雅地处理余数?

3

我有一个10字节的缓冲区:

  • 头部:3字节
  • 有效载荷:7字节

我有一个较大的有效载荷(in_data: Vec<u8>),需要将其拆分成块:

let mut buffer = vec![0u8; 10];

for chunk in in_data.chunks(7) {
    buffer[3..].copy_from_slice(chunk);
    // Do something with each packet.. send to device, etc.
}

如果所有的块都是大小为7,那么这很好,但是当存在余数时,copy_from_slice会失败,因为块比缓冲区切片小。

我可以添加if语句、检查等等。理想情况下,我希望用零填充缓冲区中的任何剩余空间,但这并不关键。

有没有一种优雅的Rust方式来处理这个问题?


我不明白你的问题 :( 有split_at可以将缓冲区划分为两个独立的切片。这是你要找的吗?请问您能否进一步澄清您的问题(因为您使用“缓冲区”的术语不一致)? :) - hellow
1个回答

2
我认为这是最简单、最干净的答案:
let mut buffer = vec![0u8; 10];

for chunk in in_data.chunks(7) {
    buffer[3..3 + chunk.len()].copy_from_slice(chunk);
    // Do something with each packet.. send to device, etc.
}

是的,我知道。标题指示字节数...为了改进答案,也许加入填充是有意义的...但似乎还没有slice.fill。 - Juan Leni

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接