gav*_*inb 79
要将一片字节转换为字符串切片(假设采用UTF-8编码):
use std::str;
//
// pub fn from_utf8(v: &[u8]) -> Result<&str, Utf8Error>
//
// Assuming buf: &[u8]
//
fn main() {
let buf = &[0x41u8, 0x41u8, 0x42u8];
let s = match str::from_utf8(buf) {
Ok(v) => v,
Err(e) => panic!("Invalid UTF-8 sequence: {}", e),
};
println!("result: {}", s);
}
Run Code Online (Sandbox Code Playgroud)
转换是就地的,不需要分配.String如有必要,您可以通过调用.to_owned()字符串切片(其他选项可用)从字符串切片创建.
转换函数的库参考:
Bjo*_*orn 55
fn main() {
let buf = &[0x41u8, 0x41u8, 0x42u8];
let s = String::from_utf8_lossy(buf);
println!("result: {}", s);
}
Run Code Online (Sandbox Code Playgroud)
它将无效的UTF-8字节转换为 ,因此不需要进行错误处理.这对你不需要的时候很好,我几乎不需要它.你真的得到了一个String.它应该使您从服务器上获得的内容更容易打印出来.
有时您可能需要使用该into_owned()方法,因为它是写入时的克隆.
She*_*ter 38
如果你实际上有一个bytes(Vec<u8>)向量并希望转换为a String,那么最有效的方法就是重用分配String::from_utf8:
fn main() {
let bytes = vec![0x41, 0x42, 0x43];
let s = String::from_utf8(bytes).expect("Found invalid UTF-8");
println!("{}", s);
}
Run Code Online (Sandbox Code Playgroud)
Luc*_*lla 10
就我而言,我只需要将数字转换为字符串,而不是根据某种编码将数字转换为字母,所以我这样做了
fn main() {
let bytes = vec![0x41, 0x42, 0x43];
let s = format!("{:?}", &bytes);
println!("{}", s);
}
Run Code Online (Sandbox Code Playgroud)