我有一个函数接受带有args的回调data: *const u8, length: usize
,该回调表示某些路径。从中创建OsStr(ing)的正确方法是什么?
有from_byte_slice
在OsStrExt
,但好像它不检查数据是否正确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
,我强烈推荐优秀的文档。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句