代码之家  ›  专栏  ›  技术社区  ›  Juan Leni

在将向量分割成块时,处理剩余部分的优雅方法是什么?

  •  3
  • Juan Leni  · 技术社区  · 6 年前

    我有一个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 失败,因为块小于缓冲区片。

    我可以添加ifs、checks等。理想情况下,我希望用零填充缓冲区中的任何剩余空间,但这并不重要。

    什么是优雅的锈处理方式?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Shepmaster Tim Diekmann    6 年前

    我认为这是最简单、最干净的答案:

    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.
    }