2014-11-28 18 views
11

Come convertire un valore letterale stringa ascii (ad esempio "123 458") in una fetta & [u8] in ruggine? Ruggine ha 6? 7? tipi di stringa e non c'è quasi uniformità in ciò che chiami per convertire tra di loro.Convertire una stringa ascii letterale in & [u8] in Rust?

mi aspettavo che fosse qualcosa sulla falsariga di:

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

si prega di prendere sulla fede che ho effettivamente bisogno di fare questo; Sto scrivendo casi di test per un codice parser di file.

+2

Infatti Rust ha solo due tipi di stringhe, 'String' e' str'. –

+3

Non so dove ti sia venuta l'idea che abbia 6 o 7 tipi di stringhe e non so dove ti è venuta l'idea che non ci sia quasi nessuna uniformità nelle chiamate di conversione; mentre ci sono ancora pochissimi posti dove non tutto è stato reso coerente, come regola generale tutto è molto coerente. 'std :: ascii' è una delle poche aree rimaste che potrebbe fare con un po 'di rielaborazione; non è la cosa più bella con cui lavorare, e vale la pena notare che 'Ascii' è il tipo di un * singolo ASCII ottetto *, e che' Vec '/' [Ascii] 'diventano i tipi di" stringa ASCII ", come fosse. –

+1

Ci sono [alcune regole] (https://github.com/rust-lang/rust/wiki/Doc-detailed-release-notes#cast-naming-conventions) sulla denominazione delle conversioni, quindi stiamo cercando di essere il più uniforme possibile. – huon

risposta

23

Dopo aver scavato molte altre risposte correlate e corretto la versione notturna del compilatore, ho scoperto che è banale; basta aggiungere una "b" letterale:

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

BTW, il tuo tentativo originale può essere riscritto come 'let array =" 123456 ".as_bytes()", è così semplice :) Questo non controlla l'astinenza, naturalmente, restituirà la sequenza di byte UTF-8. una matrice statica, il byte letterale è la strada da percorrere. –

Problemi correlati