如何将切片拆分为标头数组引用和尾部切片?

How to split a slice into a header array reference and a tail slice?

提问人:fadedbee 提问时间:7/17/2023 最后编辑:fadedbee 更新时间:7/17/2023 访问量:59

问:

我正在寻找一个签名类似于以下内容的函数:

split_header_and_tail(buf: &[u8]) -> Option<(&[u8; HEADER_LENGTH], &[u8])>

如果提供的切片太短,则结果为 ,但如果足够长,则返回对第一个字节和尾部切片的引用。NoneHEADER_LENGTH

第一部分必须是对固定长度数组的引用,因为我需要将其细分为各种固定长度的字段。

数组 Rust Slice

评论

0赞 Chayim Friedman 7/17/2023
吹毛求疵:不是一个向量,而是一个切片&[T]
0赞 fadedbee 7/17/2023
我引用向量来调用它,但你是对的,这些是切片。我更正了题目。谢谢,克里斯。

答:

2赞 Chayim Friedman 7/17/2023 #1

每晚,有 split_array_ref()

#![feature(split_array)]

fn split_header_and_tail(buf: &[u8]) -> Option<(&[u8; HEADER_LENGTH], &[u8])> {
    if buf.len() < HEADER_LENGTH {
        None
    } else {
        Some(buf.split_array_ref())
    }
}

在稳定版上,您可以使用:TryInto

fn split_header_and_tail(buf: &[u8]) -> Option<(&[u8; HEADER_LENGTH], &[u8])> {
    if buf.len() < HEADER_LENGTH {
        None
    } else {
        let (head, tail) = buf.split_at(HEADER_LENGTH);
        Some((head.try_into().unwrap(), tail))
    }
}