1 个不稳定版本
使用旧的Rust 2015
0.1.0 | 2024年8月8日 |
---|
408 在 过程宏 中
105 每月下载量
24KB
298 行
rbitpack
该 rbitpack
crate 提供了一个过程宏,用于将结构体的布尔字段打包和解包到各种位大小。这可以特别有用,用于减少内存使用或执行位级操作。
功能
- 高效的打包和解包:将多个布尔字段打包到一个整数类型中(
u8
、u16
、u32
、u64
)或一个Vec<u64>
中。 - 溢出处理:控制当布尔字段的数量超过可用的位时是否触发溢出错误。
- 动态位字段大小:支持使用来自
bitval
crate 的Bitfield
类型打包到动态位字段大小。
使用方法
要使用 rbitpack
宏,将其添加到您的结构体中,如下所示
use rbitpack::BitwisePackable;
#[derive(BitwisePackable)]
#[rbitpack(size = "i8", overflow = false)]
struct MyStruct {
field1: bool,
field2: bool,
// Add more fields as needed
}
属性
size
:指定打包的位大小(i8
、i16
、i32
、i64
,或auto
用于动态大小)。overflow
:控制是否在溢出时恐慌(默认为false
)。
自动大小
如果您使用 auto
作为 size
属性,则需要安装并导入来自 bitval
crate 的 Bitfield
类型。将 bitval
添加到您的 Cargo.toml
。
[dependencies]
bitval = "0.1"
然后,在您的Rust代码中导入 Bitfield
use bitval::Bitfield;
示例
使用 u8
进行打包和解包
#[derive(BitwisePackable)]
#[rbitpack(size = "i8")]
struct Example {
a: bool,
b: bool,
c: bool,
}
let example = Example { a: true, b: false, c: true };
let packed = Example::pack(&example);
let unpacked = Example::unpack(packed);
使用动态位字段大小
#[derive(BitwisePackable)]
#[rbitpack(size = "auto")]
struct DynamicExample {
x: bool,
y: bool,
z: bool,
}
let example = DynamicExample { x: true, y: false, z: true };
let packed = DynamicExample::pack(&example);
let unpacked = DynamicExample::unpack(packed);
许可证
此软件包采用MIT许可证。有关详细信息,请参阅LICENSE文件。
依赖项
~1.5MB
~36K SLoC