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

标签 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]);
    }
}
但我得到error[E0608]: cannot index into a value of type `u8`

最佳答案

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);
    }
}
未提供此代码的原因是 Index trait的定义如下:
pub trait Index<Idx>
where
    Idx: ?Sized,
{
    type Output: ?Sized;
    fn index(&self, index: Idx) -> &Self::Output;
}
index()返回一个引用,但是引用总是指向字节地址;您无法引用任何内容。

根据您的实际用例,您可能还对以下 crate 之一感兴趣:
  • bitfield
  • bitvec
  • 关于rust - 如何在Rust中的定位索引处获取位值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65323284/

    相关文章:

    rust - 在不同的模块中使用无方法特征实现

    rust - 如何仅为具有特定项的迭代器实现迭代器适配器?

    json - 读入json文件,写入不缩进

    Rust Diesel 无法编译并出现链接器错误

    rust - 运行 cargo run 时带有行号的堆栈跟踪

    reference - 如何抽象出对值或值本身的引用?

    rust - 如何使用 Tokio 远程关闭正在运行的任务

    memory-management - Rust 会释放被覆盖变量的内存吗?

    linux - 如何在 RHEL Linux 服务器上安装 Cargo?

    rust - 是否有可能在 Rust 的不同源文件中有一个模块