提问人:fadedbee 提问时间:7/17/2023 最后编辑:fadedbee 更新时间:7/17/2023 访问量:59
如何将切片拆分为标头数组引用和尾部切片?
How to split a slice into a header array reference and a tail slice?
问:
我正在寻找一个签名类似于以下内容的函数:
split_header_and_tail(buf: &[u8]) -> Option<(&[u8; HEADER_LENGTH], &[u8])>
如果提供的切片太短,则结果为 ,但如果足够长,则返回对第一个字节和尾部切片的引用。None
HEADER_LENGTH
第一部分必须是对固定长度数组的引用,因为我需要将其细分为各种固定长度的字段。
答:
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))
}
}
评论
&[T]