2015-07-08 11 views
11

To wydaje się trywialne, ale nie mogę znaleźć sposobu, aby to zrobić.Konwersja str na znak & [u8]

Na przykład

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

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

zawiedzie skompilować z:

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

documentation jednak stwierdza, że:

Rzeczywista reprezentacja Strs mieć bezpośrednie odwzorowanie na plasterki: & str jest taki sam jak & [u 8].

+1

Fakt, że jest to jeden z około pięć wyniki google dla tego komunikatu o błędzie wydają mi się szalone! Uderzyłem to w moim pierwszym programie testowym po 1.0 (wdrażającym "cat"). –

Odpowiedz

15

Można użyć metody as_bytes:

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

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

lub w konkretnym przykładzie, można użyć bajt dosłowne:

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

Chciałbym dodać, że dokumentacja odnosi się do * reprezentacji *, ale koncepcyjnie fragment łańcucha gwarantuje, że jego zawartość jest poprawna UTF-8, podczas gdy bajtowy nie. – llogiq