A volte voglio leggere un singolo byte da un std::io::Read
er. Se provo a fare questo:Posso creare una porzione di un singolo byte (u8)?
use std::io;
use std::io::Read;
fn main() {
let mut byte: u8 = 0;
io::stdin().read(&mut byte).unwrap();
println!("byte: {}", byte);
}
ottengo il seguente errore (che è chiaro, come byte
non è una fetta):
error[E0308]: mismatched types
--> src/main.rs:6:22
|
6 | io::stdin().read(&mut byte).unwrap();
| ^^^^^^^^^ expected slice, found u8
|
= note: expected type `&mut [u8]`
found type `&mut u8`
C'è un modo posso mantenere byte
come un semplice u8
e basta prenderne una fetta, che poi posso passare a read()
? Il modo più ovvio per fare questo lavoro di codice è quello di utilizzare un array di lunghezza 1:
use std::io;
use std::io::Read;
fn main() {
let mut byte: [u8; 1] = [0];
io::stdin().read(&mut byte).unwrap();
println!("byte: {}", byte[0]);
}
Ma è sensazione un po 'strano per tutto il resto del codice, e sarebbe più naturale di utilizzare un unico u8
piuttosto che un [u8; 1]
che devo indicizzare.
Se non è possibile creare una sezione dal semplice u8
va bene, ma non so se è possibile o meno e vorrei sapere.
Mentre questo mi piace come un modo più semplice per far funzionare il codice, non risponde alla mia domanda reale. – Cornstalks
@Cornstalks: per rispondere alla tua domanda effettiva, allora: no, non puoi farlo, e non c'è quasi mai bisogno di farlo. Anche se non riuscissi a ottenere un iterable da una leggibile, potresti semplicemente inserire 'byte [0]' in un'altra variabile e usarlo. – Ryan
Cool, grazie! Questo è un grande commento e penso che sarebbe fantastico se potessi modificarlo nella tua risposta.Come è, lo accetterò, ma quel commento mi completa davvero le cose. Grazie! – Cornstalks