从 FFI 返回的切片创建 OsStr(ing) 的正确方法是什么?



>我有一个函数,它接受带有 args 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() {
}

请注意,这是特定于 *nix 的 - Windows 和 *nix 不表示路径的方式相同(事实证明这些东西相当复杂!如果您的 API 实际上返回的是 UTF-8 字符串,那么您可以使用普通字符串方法将原始组件转换为 &str,然后转换为 OsStr(ring)

有关WTF-8的更多信息,我强烈推荐优秀的文档。

相关内容

最新更新