u8 în Rust

Octeți: u8 Rust 1.0

Întreg fără semn pe 8 biți (0-255): tipul unui octet, folosit pentru date binare și text ASCII/UTF-8.

Sintaxă
let b: u8 = 200;
let litera = b'A';      // 65
let octeti = b"text";  // &[u8; 4]

u8::MIN  // 0
u8::MAX  // 255

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 char fiecare octet al unui text cu diacritice: ș devine două caractere ciudate. Parcurge textul cu chars(), nu cu bytes().
  • Aduni valori u8 pentru o medie: suma depășește repede 255. Convertește întâi în u16 sau u32.

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.