Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 当值位于向量中时,是否可以将调试输出格式化为二进制?_Rust - Fatal编程技术网

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

在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 [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如何回答问题的“二进制”部分可能存在重复?这太棒了,它适用于十六进制!不幸的是,这对二进制输出不起作用,这就是我现在所处的位置。我更新了这个问题以消除十六进制引用,因此它更清楚地关心二进制(我最初不知道你可以做任何事情,所以我尝试更一般。我的错误!)中间
字符串
为。中间
字符串
为。