2014-05-24 5 views
11

Das könnte die dümmste Frage von Rustlang sein, aber ich verspreche, dass ich mein Bestes versucht habe, die Antwort in der Dokumentation oder an jedem anderen Ort im Internet zu finden.Wie konvertiere ich eine Zeichenfolge in einen Vektor von Bytes in Rost?

Ich kann einen String in einen Vektor von Bytes wie folgt konvertieren:

let bar = bytes!("some string"); 

Leider kann ich es auf diese Weise nicht tun

let foo = "some string"; 
let bar = bytes!(foo); 

Da bytes! eine Stringliteral erwartet.

Aber wie bekomme ich dann meine foo in einen Vektor von Bytes umgewandelt?

Antwort

17

(&str).as_bytes gibt Ihnen einen Blick auf eine Zeichenfolge als &[u8] Byte Scheibe (das auf String genannt werden kann, da das zu str derefs, und es gibt auch String.into_bytes ein String verbrauchen, um Ihnen ein Vec<u8>.

Verwenden .as_bytes Version, wenn Sie nicht brauchen, das Eigentum an der Bytes.

fn main() { 
    let string = "foo"; 
    println!("{:?}", string.as_bytes()); // prints [102, 111, 111] 
} 

BTW, die naming conventions for conversion functions sind nützlich in Situationen wie diese, weil sie Ihnen etwa wh wissen bei Namen, den Sie suchen.

+0

Vielen Dank für Ihre Antwort. Kannst du das auf mein Beispiel anwenden, so dass ich das Äquivalent von "Bytes! (Foo)" in "bar" habe? Ich habe 'let bar = (& foo) .as_bytes' versucht, aber das scheint den Trick nicht zu machen. – Christoph

+0

Spezifischer gibt es mir diesen Kompilierfehler: * versuchte, Wert der Methode 'as_bytes' auf dem Typ' & 'static str' zu nehmen * – Christoph

+0

Sie müssen es mit '()' s: 'foo.as_bytes () '. Ich habe ein Beispiel in meine Antwort eingefügt. – huon

Verwandte Themen