如何在 Rust 中获取定位索引处的位值?

Ayu*_*hra 6 rust rust-cargo

我正在尝试执行下面的程序。

fn main() {
    let a: u8 = 0b00000001;
    let b: u8 = 0b10101010;
    let c: u8 = 0b00001111;
    let length = a.count_ones() + a.count_zeros();
    for n in 0..length {
        println!("{}", a[n]);
        println!("{}", b[n]);
        println!("{}", c[n]);
    }
}
Run Code Online (Sandbox Code Playgroud)

但我越来越error[E0608]: cannot index into a value of type `u8`

Pet*_*all 12

Rust 不提供整数各个位的索引。您需要改用按位运算符:

这将从右开始计数(从最低有效位到最高有效位):

fn main() {
    let a: u8 = 0b00000001;
    let b: u8 = 0b10101010;
    let c: u8 = 0b00001111;
    let length = a.count_ones() + a.count_zeros();
    for n in 0..length {
        println!("{}", a >> n & 1);
        println!("{}", b >> n & 1);
        println!("{}", c >> n & 1);
    }
}
Run Code Online (Sandbox Code Playgroud)

没有提供这一点的原因是该Index特征的定义如下:

pub trait Index<Idx>
where
    Idx: ?Sized,
{
    type Output: ?Sized;
    fn index(&self, index: Idx) -> &Self::Output;
}
Run Code Online (Sandbox Code Playgroud)

index()返回一个引用,但引用始终指向字节地址;你不能引用任何一个位。


根据您的实际用例,您可能还对以下板条箱之一感兴趣:

  • 另外,从技术上讲,您可以实现“Index”,您只需返回对 const“0”或“1”的引用即可。 (2认同)