Ce face char::from_u32
char::from_u32(0x0219) dă Some('ș'). Nu orice număr este un caracter valid: valorile peste 0x10FFFF și intervalul 0xD800–0xDFFF (rezervat pentru UTF-16) dau None.
Drumul invers este c as u32. Pentru un octet (u8) există conversia directă b as char sau char::from(b), care nu poate eșua (dă caracterele U+0000–U+00FF).
Parametri
| Parametru | Descriere |
|---|---|
i |
Codul Unicode (numărul caracterului). |
Ce returnează
Option<char>.
Exemple
Exemplul 1: Coduri valide și invalide
fn main() {
for cod in [0x41, 0x0219, 0x021B, 0x20AC, 0xD800, 0x110000] {
println!("{cod:#08X} -> {:?}", char::from_u32(cod));
}
println!("'ț' are codul {:#X}", 'ț' as u32);
}
Rezultat
0x000041 -> Some('A')
0x000219 -> Some('ș')
0x00021B -> Some('ț')
0x0020AC -> Some('€')
0x00D800 -> None
0x110000 -> None
'ț' are codul 0x21B
Exemplul 2: Literele mari ale alfabetului din coduri
fn main() {
let litere: String = (0x41..=0x5A).filter_map(char::from_u32).collect();
println!("{litere}");
let romanesti = [0x102, 0xC2, 0xCE, 0x218, 0x21A];
let s: String = romanesti.iter().filter_map(|&c| char::from_u32(c)).collect();
println!("{s}");
}
Rezultat
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ĂÂÎȘȚ
Greșeli frecvente
- Faci
cod as charcu unu32: nu compilează (only `u8` can be cast as `char`, not `u32`). Foloseștechar::from_u32.
Comenzi înrudite
char: Un singur caracter Unicode, scris între apostrofuri (‘ș’); ocupă mereu 4 octeți în memorie.char::to_digit: to_digit transformă o cifră (‘7’, ‘f’) în număr într-o bază dată; from_digit face invers. Ambele returnează Option.char::len_utf8: Câți octeți ocupă caracterul când este scris în UTF-8, adică într-un String: între 1 și 4.TryFrom: Conversii care pot eșua și returnează Result: u8::try_from(300) dă Err. Implementarea aduce și try_into().