gpt4 book ai didi

string - 如果 NUL 终止符不在切片的末尾,如何从以 NUL 终止的字节切片中获取 '&str'?

转载 作者:行者123 更新时间:2023-11-29 08:21:13 25 4
gpt4 key购买 nike

虽然 CStr 通常用于 FFI,但我正在读取 &[u8],它以 NUL 结尾并确保是有效的 UTF-8,所以没有需要检查。

但是 NUL 终止符不一定在切片的末尾。将此作为 &str 获取的好方法是什么?

建议使用 CStr::from_bytes_with_nul,但这会在内部 \0 字符(当 \0 不是' t 最后一个字符)。

最佳答案

我会使用迭代器适配器来查找第一个零字节的索引:

pub unsafe fn str_from_u8_nul_utf8_unchecked(utf8_src: &[u8]) -> &str {
let nul_range_end = utf8_src.iter()
.position(|&c| c == b'\0')
.unwrap_or(utf8_src.len()); // default to length if no `\0` present
::std::str::from_utf8_unchecked(&utf8_src[0..nul_range_end])
}

这有一个要求捕获所有情况(比如数组中没有 0)的主要优点。

如果您想要检查格式正确的 UTF-8 的版本:

pub fn str_from_u8_nul_utf8(utf8_src: &[u8]) -> Result<&str, std::str::Utf8Error> {
let nul_range_end = utf8_src.iter()
.position(|&c| c == b'\0')
.unwrap_or(utf8_src.len()); // default to length if no `\0` present
::std::str::from_utf8(&utf8_src[0..nul_range_end])
}

关于string - 如果 NUL 终止符不在切片的末尾,如何从以 NUL 终止的字节切片中获取 '&str'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42119218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com