作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
虽然 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/42066381/
我是一名优秀的程序员,十分优秀!