在 Vec<i8> 和 &str 之间转换

Converting between Vec<i8> and &str

我有一个 Vec<i8> 我需要读作 &str。现在我找到了两种方法来做到这一点,这两种方法都让我不开心。

// Quite complex for something this simple
str::from_utf8(buffer.into_iter().map(|c| c as u8).collect::<Vec<u8>>().as_slice())

// transmute makes me uncomfortable
str::from_utf8(mem::transmute::<Vec<i8>, Vec<u8>>(buffer).as_slice());

有没有更简单的方法来实现这个目标?

您可能会发现转换为 String 更好,因为您可以将 &String 传递给需要 str 的函数。你可以把它缩短到大约

String::from_utf8(buffer.iter().map(|&c| c as u8).collect())

后面可以缩短为

String::from_utf8(mem::transmute(buffer))

我怀疑你能做得比这些更好。