有時我想從std::io::Read
er讀取一個字節。如果我試着這樣做:我可以創建一個單字節片段(u8)嗎?
use std::io;
use std::io::Read;
fn main() {
let mut byte: u8 = 0;
io::stdin().read(&mut byte).unwrap();
println!("byte: {}", byte);
}
我得到以下錯誤(這是明顯的,因爲byte
不是切片):
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`
有沒有一種方法可以讓我保持byte
作爲一個簡單的u8
,只需要一小部分,然後我可以傳遞給read()
?使此代碼工作最顯而易見的方法是使用長度爲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]);
}
但是,這是整個代碼的其餘部分有點怪異的感覺,這將是更自然的使用單個u8
,而不是我必須索引到[u8; 1]
。
如果無法從簡單的u8
創建一個切片,那沒關係,但我不知道是否可以或不想,並且想知道。
雖然我喜歡這是一個更簡單的方法來使代碼工作,但它並沒有回答我的實際問題。 – Cornstalks
@Cornstalks:回答你的實際問題,然後:不,你不能這樣做,幾乎沒有任何需要。即使你不能讀取可讀的迭代,你也可以將'byte [0]'放入另一個變量中並使用它。 – Ryan
很酷,謝謝!這是一個很好的評論,我認爲如果你可以將它編輯成你的答案,那將是非常棒的。因爲,我會接受這一點,但那個評論真的爲我完成了一些事情。謝謝! – Cornstalks