如何在 Rust 语言的单个字节中 write/read 8 true/false
How to write/read 8 true/false in a single byte on rust language
大家都知道bool用的是1字节而不是1字节
如果我想在一个字节中存储 8 个(或更多)true/false,
我怎样才能在 Rust 上做到这一点?
像这样:
fn main()
{
let x:ByteOnBits;
x[3]=true;
if x[4]
{
println!("4th bit is true");
}
}
一个包含 8 个布尔值的数组将是 8 个字节,而不是我期望的 1 个字节。
您可以使用 bitflags
crate 将位用作以不同大小存储的布尔值。虽然它旨在用于其他用途,但您仍然可以利用它的功能。
bitvec
crate 提供您需要的设施:
use bitvec::prelude::*;
fn main() {
let mut data = 0u8;
let bits = data.view_bits_mut::<Lsb0>();
bits.set(3, true);
if bits[4] {
println!("xxx");
}
assert_eq!(data, 8);
}
大家都知道bool用的是1字节而不是1字节
如果我想在一个字节中存储 8 个(或更多)true/false, 我怎样才能在 Rust 上做到这一点?
像这样:
fn main()
{
let x:ByteOnBits;
x[3]=true;
if x[4]
{
println!("4th bit is true");
}
}
一个包含 8 个布尔值的数组将是 8 个字节,而不是我期望的 1 个字节。
您可以使用 bitflags
crate 将位用作以不同大小存储的布尔值。虽然它旨在用于其他用途,但您仍然可以利用它的功能。
bitvec
crate 提供您需要的设施:
use bitvec::prelude::*;
fn main() {
let mut data = 0u8;
let bits = data.view_bits_mut::<Lsb0>();
bits.set(3, true);
if bits[4] {
println!("xxx");
}
assert_eq!(data, 8);
}