Ce face u8
u8 ține valori de la 0 la 255, adică exact un octet. Toate datele binare (fișiere, rețea, imagini) sunt &[u8] sau Vec<u8>, iar un String este, în interior, un șir de octeți UTF-8, accesibil cu as_bytes() sau bytes().
Literalul b'A' este octetul caracterului ASCII A (65), iar b"text" este un tablou de octeți. Transformarea în caracter se face cu b as char sau char::from(b), corect doar pentru valori ASCII (0-127): literele cu diacritice ocupă câte doi octeți în UTF-8.
Ca orice întreg, u8 poate depăși ușor (200 + 100): în debug, panică. Folosește checked_add, saturating_add sau un tip mai mare pentru calcule.
Ce returnează
Este un tip, nu o funcție.
Exemple
Exemplul 1: Octeți și caractere
ș nu este ASCII: în UTF-8 ocupă doi octeți (200 și 153).
fn main() {
let a = b'A';
println!("b'A' = {a}, înapoi: {}", a as char);
println!("b'a' - b'A' = {}", b'a' - b'A');
println!("b\"Rust\" = {:?}", b"Rust");
println!("\"Iași\" ca octeți: {:?}", "Iași".as_bytes());
println!("\"Brașov\": {} caractere, {} octeți", "Brașov".chars().count(), "Brașov".len());
}
Rezultat
b'A' = 65, înapoi: A
b'a' - b'A' = 32
b"Rust" = [82, 117, 115, 116]
"Iași" ca octeți: [73, 97, 200, 153, 105]
"Brașov": 6 caractere, 7 octeți
Exemplul 2: Calcule sigure cu u8
Componentele unei culori sunt u8; pentru a lumina o culoare folosim saturating_add, iar pentru medie trecem în u16.
fn main() {
let (r, g, b): (u8, u8, u8) = (200, 120, 30);
let mai_luminos = (r.saturating_add(80), g.saturating_add(80), b.saturating_add(80));
println!("culoare: ({r}, {g}, {b}) -> mai luminoasă: {mai_luminos:?}");
println!("200 + 80 verificat: {:?}", r.checked_add(80));
let gri = ((r as u16 + g as u16 + b as u16) / 3) as u8;
println!("nuanța de gri: {gri}");
println!("u8: de la {} la {}", u8::MIN, u8::MAX);
}
Rezultat
culoare: (200, 120, 30) -> mai luminoasă: (255, 200, 110)
200 + 80 verificat: None
nuanța de gri: 116
u8: de la 0 la 255
Greșeli frecvente
- Transformi în
charfiecare octet al unui text cu diacritice:șdevine două caractere ciudate. Parcurge textul cuchars(), nu cubytes(). - Aduni valori
u8pentru o medie: suma depășește repede 255. Convertește întâi înu16sauu32.
Comenzi înrudite
u8::is_ascii_digit: Verifică dacă octetul este o cifră ASCII, de la b’0′ la b’9′.u8::to_ascii_uppercase: Transformă un octet literă ASCII mică în literă mare; orice alt octet rămâne neschimbat.i32: Tipul implicit pentru numere întregi cu semn, pe 32 de biți: de la -2147483648 la 2147483647.fs::read: Citește tot conținutul unui fișier ca octeți (Vec<u8>), fără să ceară ca textul să fie UTF-8.