如何打印u8的矢量作为字符串?

时间:2015-01-24 09:07:48

标签: rust

这是我的代码:

let mut altbuf: Vec<u8> = Vec::new();

// Stuff here...

match stream.read_byte() {
    Ok(d) => altbuf.push(d),
    Err(e) => { println!("Error: {}", e); doneflag = true; }
}

for x in altbuf.iter() {
    println!("{}", x);
}

代码打印u8字节是正确的,但我无法弄清楚如何将纯u8字节的矢量转换为字符串?关于堆栈溢出的类似问题的唯一其他答案假定您正在使用类型为&amp; [u8]的向量。

3 个答案:

答案 0 :(得分:9)

如果查看String documentation,可以使用一些方法。 Vec<u8> String::from_utf8 &[u8]String::from_utf8_lossy Vec<T> [T]

请注意,Vec<u8>或多或少是&[u8]左右拥有的,可调整大小的包装器。也就是说,如果您有&*some_vec,则可以将其转换为&[T],最容易通过重新借用它( Vec<T>)。您也可以直接在{{1}}上调用{{1}}上定义的任何方法(通常,实现Deref特征的事情也是如此)。

答案 1 :(得分:0)

要将字节打印为UTF-8字符串,请在字节格式错误时使用std::str::from_utf8。当字节始终是有效的UTF-8时,请使用不安全的std::str::from_utf8_unchecked

println!("{}", std::str::from_utf8(&altbuf).unwrap());

答案 2 :(得分:0)

使用write中的std::io方法:

use std::{io, io::Write};

fn main() -> io::Result<()> {
   io::stdout().write(b"March\n")?;
   Ok(())
}

它将打印u8的一部分,也称为字节串。

io::stdout