Rust 当值位于向量中时,是否可以将调试输出格式化为二进制?
在Rust中,您可以在不同的基础上格式化数字,这对于位旋转非常有用:Rust 当值位于向量中时,是否可以将调试输出格式化为二进制?,rust,Rust,在Rust中,您可以在不同的基础上格式化数字,这对于位旋转非常有用: println!("{:?} {:b} {:x}", 42, 42, 42); // 42 101010 2a 理想情况下,这也适用于向量!虽然它适用于十六进制: println!("{:#x?}", vec![42, 43, 44]); // [ 0x2a, 0x2b, 0x2c ] 它不适用于二进制: println!("{:b}", vec![42, 43, 44]); // I wish this were [10
println!("{:?} {:b} {:x}", 42, 42, 42); // 42 101010 2a
理想情况下,这也适用于向量!虽然它适用于十六进制:
println!("{:#x?}", vec![42, 43, 44]); // [ 0x2a, 0x2b, 0x2c ]
它不适用于二进制:
println!("{:b}", vec![42, 43, 44]); // I wish this were [101010, 101011, 101100]
取而代之的是:
无法满足特性绑定的std::vec::vec:std::fmt::Binary
有没有一种在向量内部进行二进制格式化的方法?有一种直接的方法,没有,但我会这样做:
use std::fmt;
struct V(Vec<u32>);
// custom output
impl fmt::Binary for V {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
// extract the value using tuple idexing
// and create reference to 'vec'
let vec = &self.0;
// @count -> the index of the value,
// @n -> the value
for (count, n) in vec.iter().enumerate() {
if count != 0 { write!(f, " ")?; }
write!(f, "{:b}", n)?;
}
Ok(())
}
}
fn main() {
println!("v = {:b} ", V( vec![42, 43, 44] ));
}
我正在使用rustc 1.31.1(b6c32da9b 2018-12-18)
锈蚀参考
锈蚀参考。好的,直接的方法,不,但我会这样做:
use std::fmt;
struct V(Vec<u32>);
// custom output
impl fmt::Binary for V {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
// extract the value using tuple idexing
// and create reference to 'vec'
let vec = &self.0;
// @count -> the index of the value,
// @n -> the value
for (count, n) in vec.iter().enumerate() {
if count != 0 { write!(f, " ")?; }
write!(f, "{:b}", n)?;
}
Ok(())
}
}
fn main() {
println!("v = {:b} ", V( vec![42, 43, 44] ));
}
我正在使用rustc 1.31.1(b6c32da9b 2018-12-18)
锈蚀参考
铁锈参考。我想你的问题已经得到了答案。请让我们知道这是否确实回答了您的问题,然后我们可以将其标记为重复。其他QA如何回答问题的“二进制”部分可能存在重复?这太棒了,它适用于十六进制!不幸的是,这对二进制输出不起作用,这就是我现在所处的位置。我更新了这个问题,以消除十六进制引用,因此它更清楚地关心二进制(我最初不知道你可以做任何事情,所以我试着更一般一些。我的错误!)我想你的问题得到了答案。请让我们知道这是否确实回答了您的问题,然后我们可以将其标记为重复。其他QA如何回答问题的“二进制”部分可能存在重复?这太棒了,它适用于十六进制!不幸的是,这对二进制输出不起作用,这就是我现在所处的位置。我更新了这个问题以消除十六进制引用,因此它更清楚地关心二进制(我最初不知道你可以做任何事情,所以我尝试更一般。我的错误!)中间
字符串
为。中间字符串
为。