这是我的代码:
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]的向量。
答案 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
的一部分,也称为字节串。