Могу ли я отформатировать выходные данные отладки как двоичные, когда значения находятся в векторе? - PullRequest
0 голосов
/ 04 января 2019

В 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<{integer}>: std::fmt::Binary не удовлетворен

Есть ли способ сделать двоичное форматирование внутри векторов?

1 Ответ

0 голосов
/ 04 января 2019

Ну, прямой путь, нет, но я бы сделал что-то вроде этого:

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 v.rs && ./v
v = 101010 101011 101100

Я использую rustc 1.31.1 (b6c32da9b 2018-12-18)

Rust fmt :: binary ссылка.

Rust fmt :: Display ссылка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...