如何转换 [i8; 88] 一些粘稠的东西

How to convert [i8; 88] to something stringy

我有一个 bytes: [i8; 88](例如 88,但您可能会看到它的来源)。据说这是 utf-8 stringbytes 表示。对于额外的扭曲,这个 array 可能是非 null 终止的。将此 object 转换为 native Rust string (String ?)? 的最惯用方法是什么同样的问题,但最便宜的方法,例如没有内存分配或任何其他标准。

我作为一个刚开始学习语言的人的第一次天真的尝试:

fn statfs_get_mntonname(s: &statfs) -> String {
    let mut v_mntonname: std::vec::Vec<u8> = Vec::new();
    for i in 0..88 {
        v_mntonname.push(s.f_mntonname[i] as u8)
    }
    v_mntonname.push(0);
    let c_mnttoname = unsafe { CStr::from_bytes_with_nul_unchecked(
        v_mntonname.as_ref()) };
    (*c_mnttoname.to_string_lossy()).to_string()
}

我想你在寻找 from_utf8 or its unsafe cousin from_utf8_unchecked

感谢@phimuemue,以下解决了我的需求:

fn mnt_to_string(bytes: &[i8]) -> String {
   unsafe { std::str::from_utf8_unchecked(std::mem::transmute(bytes)) }.to_string()
}

fn statfs_get_fstypename(s: &statfs) -> String {
     mnt_to_string(&s.f_fstypename as &[i8])
}