traduccion ps4 lenguaje language descargar rust

ps4 - rust traduccion



Emitir un `u32` a` char` (1)

Estoy tratando de aprender a Rust aquí y me pillé pensando en cómo las char tienen 4 bytes de ancho:

let pizza_hex: u32 = 0x1f355; let pizza: char = ''🍕''; // (pizza char: http://www.fileformat.info/info/unicode/char/1f355/index.htm) // pizza as hex = 1f355 println!("pizza as hex = {:x}", pizza as u32); // size of pizza = 4 println!("size of pizza = {}", std::mem::size_of_val(&pizza)); // This doesn''t work super well println!("{} == {}", pizza_hex as char, pizza);

Como se ve arriba, puedo lanzar un char a un u32 y funciona (ambos tienen 4 bytes de ancho). Sin embargo, cuando u32 desde un u32 a un char , Rust se queja.

error: only `u8` can be cast as `char`, not `u32` println!("{} == {}", pizza_hex as char, pizza); ^~~~~~~~~~~~~~~~~

¿Alguna idea de por qué?


Solo porque cada char es un valor válido de u32 , pero no todos los valores de u32 son caracteres válidos.

afaict, la propiedad de los char s que tienen puntos de código Unicode válidos eventualmente tiene en cuenta la seguridad de la memoria cuando se trata de las partes internas inseguras del manejo de cadenas, o algo así.

Para convertir en tiempo de ejecución, intente esto:

// [...] let maybe_pizza: Option<char> = std::char::from_u32(pizza_hex); match maybe_pizza { Some(pizza_from_hex) => { println!("{} == {}", pizza_from_hex, pizza); } _ => {} }

Si simplemente no quieres glifos Unicode espeluznantes en los literales de tus personajes, puedes usar secuencias de escape:

// [...] let pizza_from_hex = ''/u{01f355}''; println!("{} == {}", pizza_from_hex, pizza);