2014-11-28 9 views
11

Wie konvertiert man ein ASCII-String-Literal (zB "123 458") in eine & [u8] Scheibe im Rost? Rost hat 6? 7? String-Typen, und es gibt fast keine Einheitlichkeit in was Sie aufrufen, um zwischen ihnen zu konvertieren.Konvertieren Sie ein ASCII-String-Literal nach & [u8] in Rust?

Ich erwarte es etwas entlang der Linien von sein:

let array:&[u8] = Ascii("123 456").into_bytes().as_slice().givemetheeffingbufferalready() as &[u8]; 

Bitte nehmen Sie es auf den Glauben, die ich brauche wirklich, dies zu tun; Ich schreibe Testfälle für einen Dateiparsercode.

+2

In der Tat hat Rust nur zwei String-Typen, 'String' und' str'. –

+3

Ich weiß nicht, woher Sie die Idee, dass es 6 oder 7 String-Typen hat, und ich weiß nicht, wo Sie die Idee, dass es fast keine Einheitlichkeit in Conversion-Aufrufe ist; Es gibt zwar immer noch sehr wenige Orte, wo nicht alles konsistent gemacht wurde, in der Regel ist alles sehr konsistent. 'std :: ascii' ist einer der wenigen Bereiche, die noch ein wenig überarbeitet werden können. Es ist nicht das Schönste, mit dem man arbeiten kann, und es lohnt sich zu erkennen, dass "Ascii" der Typ eines * einzelnen ASCII-Oktetts * ist, und dass 'Vec '/'[Ascii]' die "ASCII-Zeichenkette" werden es war. –

+1

Es gibt [einige Regeln] (https://github.com/rust-lang/rust/wiki/Doc-detailed-release-notes#cast-naming-conventions) über die Benennung von Conversions, also versuchen wir es zu sein so einheitlich wie möglich. – huon

Antwort

23

Nach viel durch andere verwandte Antworten zu graben, und durch die nächtliche Version des Compilers korrigiert, fand ich heraus, es ist trivial; Sie fügen einfach ein 'b' zu Ihrem Literal hinzu:

let array:&[u8] = b"123 456"; 
+16

BTW, Ihr ursprünglicher Versuch kann umgeschrieben werden als 'let array = "123456" .as_bytes() ", es ist so einfach :) Dies überprüft nicht auf Sicherheit, es wird natürlich UTF-8 Bytes Sequenz zurückgeben. Wenn Sie brauchen ein statisches Array, Byte-Literal ist der Weg zu gehen. –

Verwandte Themen