我有一个函数接受带参数的回调data: *const u8, length: usize
,代表一些路径。由此创建 OsStr(ing) 的正确方法是什么?
There's from_byte_slice
in OsStrExt
,但似乎它没有检查数据是否正确 WTF-8 或其他什么,并且不清楚如何使用它。
您可以使用from_raw_parts http://doc.rust-lang.org/std/slice/fn.from_raw_parts.html从原始指针转到切片,然后OsStrExt::from_bytes http://doc.rust-lang.org/std/os/unix/ffi/trait.OsStrExt.html:
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 https://simonsapin.github.io/wtf-8/,我强烈推荐优秀的文档。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)