我正在尝试执行以下程序。
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/