我有一个函数接受带有args data: *const u8, length: usize
的回调,它代表一些路径。从中创建OsStr(ing)的正确方法是什么?
from_byte_slice
中有OsStrExt
,但似乎没有检查数据是否正确WTF-8或其他什么,并且不清楚如何使用它。
答案 0 :(得分:3)
您可以使用from_raw_parts
从原始指针转到切片,然后OsStrExt::from_bytes
:
use std::slice;
use std::ffi::OsStr;
use std::os::unix::ffi::OsStrExt; // NOTE PLATFORM-SPECIFIC
fn foo(data: *const u8, length: usize) {
let slice = unsafe { slice::from_raw_parts(data, length) };
let os_str = OsStr::from_bytes(slice);
}
fn main() {
}
请注意这是* nix特定的 - Windows和* nix不代表路径是相同的方式(事实证明这些东西相当复杂!)。如果您的API实际上返回的是UTF-8字符串,那么您可以使用常规字符串方法将原始组件转换为&str
,然后转换为OsStr(ring)
。
有关WTF-8
的更多信息,我强烈推荐优秀的文档。