2015-07-08 4 views
11

Sembra banale, ma non riesco a trovare un modo per farlo.Conversione di uno str in un & [u8]

Ad esempio,

fn f(s: &[u8]) {} 

pub fn main() { 
    let x = "a"; 
    f(x) 
} 

fallisce la compilazione con:

error: mismatched types: 
expected `&[u8]`, 
    found `&str` 
(expected slice, 
    found str) [E0308] 

documentation, tuttavia, afferma che:

La rappresentazione effettiva di strs hanno mappature scalo a fette: & str è lo stesso di & [u 8].

+1

Il fatto che questo è l'uno dei circa cinque i risultati di Google per questo messaggio di errore mi sembrano pazzeschi! L'ho colpito nel mio primo programma di test post-1.0 (implementando "cat"). –

risposta

15

È possibile utilizzare il metodo as_bytes:

fn f(s: &[u8]) {} 

pub fn main() { 
    let x = "a"; 
    f(x.as_bytes()) 
} 

o, nel tuo esempio specifico, è possibile utilizzare un byte letterale:

let x = b"a"; 
f(x) 
+4

Vorrei aggiungere che la documentazione si riferisce alla * rappresentazione *, ma concettualmente una slice string garantisce che il suo contenuto sia UTF-8 valido, mentre una slice non lo fa. – llogiq