MST

星途 面试题库

面试题:Rust中字符串与字节串的转换及常见错误处理

在Rust中,如何将`String`类型转换为`Vec<u8>`(字节串),又如何将`Vec<u8>`转换回`String`?在转换过程中可能会遇到哪些错误,如何处理这些错误?请举例说明。
36.4万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
  1. String转换为Vec<u8>: 可以使用Stringinto_bytes方法来实现。
    let s = String::from("hello");
    let bytes: Vec<u8> = s.into_bytes();
    
  2. 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),
    }
    
  3. 转换过程中可能遇到的错误及处理
    • 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编码存储的,转换为字节序列总是成功的。