gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 08:00:02 24 4
gpt4 key购买 nike

我有一个函数接受带有参数 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的更多信息,我强烈推荐优秀的文档。

关于rust - 从 FFI 返回的切片创建 OsStr(ing) 的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28515784/

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