String::into_bytes în Rust

String Rust 1.0

Transformă String-ul în Vec<u8> cu octeții lui UTF-8, fără copiere; String-ul este consumat.

Sintaxă
pub fn into_bytes(self) -> Vec<u8>

Ce face String::into_bytes

into_bytes consumă textul (după apel nu mai poți folosi variabila) și îți dă vectorul de octeți din spatele lui, fără să copieze nimic. Este util când trimiți textul la o funcție care lucrează cu octeți (fișiere, rețea, sume de control).

Dacă vrei doar să citești octeții și să păstrezi textul, folosește as_bytes(), care dă un &[u8] împrumutat. Drumul invers este String::from_utf8.

Ce returnează

Un Vec<u8> cu octeții UTF-8 ai textului.

Exemple

Exemplul 1: Octeții unui cuvânt cu diacritice

ț este codificat în UTF-8 pe doi octeți: 200 și 155.

fn main() {
    let s = String::from("bț");
    let octeti = s.into_bytes();
    println!("{octeti:?}");
    println!("în hex: {:02X?}", octeti);
}

Rezultat

[98, 200, 155]
în hex: [62, C8, 9B]

Exemplul 2: Dus și întors

fn main() {
    let original = String::from("Piatra Neamț");
    let mut octeti = original.into_bytes();
    octeti.extend_from_slice(b" 2026");
    let inapoi = String::from_utf8(octeti).unwrap();
    println!("{inapoi}");
}

Rezultat

Piatra Neamț 2026

Greșeli frecvente

  • Folosești variabila după into_bytes: borrow of moved value. Dacă mai ai nevoie de text, folosește as_bytes().

Comenzi înrudite

  • str::bytes: Accesul la octeții UTF-8 ai textului: bytes() ca iterator de u8, as_bytes() ca felie &[u8].
  • String::from_utf8: Creează un String din octeți: from_utf8 verifică UTF-8 și dă eroare; from_utf8_lossy înlocuiește octeții greșiți cu �.
  • String::len: Lungimea textului în OCTEȚI (nu în litere) și verificarea dacă textul e gol. Pentru litere: chars().count().