有时候我想从std::io::Read
er 读取一个字节.如果我尝试这样做:
use std::io::{self, Read};
fn main() {
let mut byte: u8 = 0;
io::stdin().read(&mut byte).unwrap();
println!("byte: {}", byte);
}
Run Code Online (Sandbox Code Playgroud)
我得到以下错误(这是明确的,因为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`
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以保持byte
简单u8
,只需要切片,然后我可以传递给它read()
?使这段代码工作的显而易见的方法是使用长度为1的数组:
use std::io::{self, Read};
fn main() {
let mut byte: [u8; 1] = [0];
io::stdin().read(&mut byte).unwrap();
println!("byte: {}", byte[0]);
}
Run Code Online (Sandbox Code Playgroud)
但是在整个代码中,这有点奇怪的感觉,使用单个u8 …
我有一个类型的实例&T
。我如何将其转换为&[T; 1]
?类似于std::slice::from_ref
,除了它应该返回一个数组,而不是一个切片。
rust ×2