rust - ps4 - ¿Cómo convierto un vector de bytes(u8) a una cadena
rust traduccion (3)
Para convertir una porción de bytes en una porción de cadena (asumiendo una codificación 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);
}
La conversión está en el lugar y no requiere una asignación. Puede crear una String
desde el segmento de cadena si es necesario llamando a .to_owned()
en el segmento de cadena ( otras opciones están disponibles ).
La referencia de la biblioteca para la función de conversión:
Estoy intentando escribir un cliente TCP / IP simple en Rust y necesito imprimir el búfer que obtuve del servidor. ¿Cómo convierto el vector u8
en una String
para imprimir?
Prefiero String::from_utf8_lossy
:
fn main() {
let buf = &[0x41u8, 0x41u8, 0x42u8];
let s = String::from_utf8_lossy(buf);
println!("result: {}", s);
}
Convierte los bytes UTF-8 no válidos en , por lo que no se requiere un manejo de errores. Es bueno para cuando no necesitas eso y casi no lo necesito. De hecho, obtienes una String
de esto. Debería facilitar la impresión de lo que está obteniendo del servidor.
A veces es posible que necesite usar el método into_owned()
ya que se clona en escritura.
Si realmente tiene un vector de bytes ( Vec<u8>
) y desea convertirlo en una String
, lo más eficiente es reutilizar la asignación con la String::from_utf8
:
fn main() {
let bytes = vec![0x41, 0x42, 0x43];
let s = String::from_utf8(bytes).expect("Found invalid UTF-8");
println!("{}", s);
}