1 个不稳定版本

使用旧的Rust 2015

0.1.0 2024年8月8日

408过程宏

Download history • Rust 包仓库 105/week @ 2024-08-05 • Rust 包仓库

105 每月下载量

MIT 许可证

24KB
298

rbitpack

rbitpack crate 提供了一个过程宏,用于将结构体的布尔字段打包和解包到各种位大小。这可以特别有用,用于减少内存使用或执行位级操作。

功能

  • 高效的打包和解包:将多个布尔字段打包到一个整数类型中(u8u16u32u64)或一个 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:指定打包的位大小(i8i16i32i64,或 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