面试题答案
一键面试- 将
String
转换为Vec<u8>
: 可以使用String
的into_bytes
方法来实现。let s = String::from("hello"); let bytes: Vec<u8> = s.into_bytes();
- 将
Vec<u8>
转换回String
: 使用String::from_utf8
方法,但是这个方法可能会失败,因为不是所有的字节序列都是有效的UTF - 8编码。let bytes = vec![104, 101, 108, 108, 111]; let result = String::from_utf8(bytes); match result { Ok(s) => println!("Converted string: {}", s), Err(e) => println!("Conversion error: {}", e), }
- 转换过程中可能遇到的错误及处理:
- 从
Vec<u8>
转换为String
时:- 错误:
from_utf8
方法会返回一个Result<String, FromUtf8Error>
。如果字节序列不是有效的UTF - 8编码,就会返回Err
,错误类型为FromUtf8Error
。 - 处理:如上面代码示例,使用
match
语句或者Result
类型提供的其他方法(如unwrap_or_else
等)来处理错误。例如:
- 错误:
let bad_bytes = vec![128]; let s = String::from_utf8(bad_bytes).unwrap_or_else(|e| { println!("Error: {}", e); String::from("") });
- 从
String
转换为Vec<u8>
时:- 错误:
into_bytes
方法不会失败,因为String
本身就是以UTF - 8编码存储的,转换为字节序列总是成功的。
- 错误:
- 从