我有一个功能,接受一个带参数的回调函数data: *const u8, length: usize
,表示一些路径。如何正确地从中创建OsStr(ing)呢?
OsStrExt
中有from_byte_slice
,但似乎它不检查数据是否是正确的WTF-8或其他格式,并且不清楚如何使用它。
您可以使用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() {
}
&str
,然后再转换为OsStr(ring)
。WTF-8
的更多信息,我强烈推荐阅读优秀的文档。
<OsStr as std::os::unix::ffi::OsStrExt>::from_bytes(CStr::from_ptr(c_path).to_bytes())
可以编译,但是它很丑陋。 - Kornel