我有一个要打印的[u8; 128]
。为此,我正在使用调试格式将该缓冲区的借用传递给println!
。但是,我收到一个编译器错误。
编译器说[u8;128]
没有实现std::fmt::Debug
。但是,我要向println!
借用,这使我提出疑问,为什么Rust无法识别出这是一个切片。通过将[#derive(Debug)]
附加到具有一个成员buf: &[u8]
的结构,我得以解决此问题。将我的缓冲区通过该结构传递到println!
就解决了问题,这告诉我&[u8]
确实实现了std::fmt::Debug
。
use std::io::prelude::*;
use std::net::TcpStream;
#[derive(Debug)]
struct Fah<'a> {
buf: &'a[u8],
}
fn main() -> std::io::Result<()> {
let mut stream = TcpStream::connect("216.58.194.206:80")?;
stream.write(&[1])?;
let mut buf = [0; 128];
stream.read(&mut buf)?;
println!("buf: {:?}", &buf); // This line does not compile
println!("fah: {:?}", Fah { buf: &buf}); // This line works fine
Ok(())
}
我希望这可以编译。但是,编译器抱怨the trait std::fmt::Debug is not implemented for [u8; 128]
,如我之前所说。
答案 0 :(得分:4)
btn.press();
btn.release();
是一个&buf
,在很多时候都被隐式强制(由unsizing强制为&[u8; 128]
。如果您明确想要切片,请it’ll work:
&[u8]
但首先也要切片:
println!("{:?}", &a as &[u8]);