#binary-data #binary-parser #structs #read #macro-derive #helping #methods

无需 std binread

A Rust crate for helping read structs from binary data using ✨macro magic✨

11 个稳定版本

2.2.0 2021 年 8 月 25 日
2.1.1 2021 年 4 月 1 日
2.1.0 2021 年 3 月 28 日
1.4.1 2020 年 11 月 11 日
1.0.2 2020 年 7 月 15 日

#433 in Rust 模式

Download history 12674/week @ 2024-03-14 15665/week @ 2024-03-21 12605/week @ 2024-03-28 13010/week @ 2024-04-04 14593/week @ 2024-04-11 17233/week @ 2024-04-18 13318/week @ 2024-04-25 14886/week @ 2024-05-02 10570/week @ 2024-05-09 11107/week @ 2024-05-16 13049/week @ 2024-05-23 14866/week @ 2024-05-30 13258/week @ 2024-06-06 14407/week @ 2024-06-13 14071/week @ 2024-06-20 9072/week @ 2024-06-27

53,687 每月下载量
用于 235 个 crate (34 直接)

MIT 许可证

115KB
2K SLoC

binread

tests docs.rs codecov discord matrix: #binrw:matrix.org

A Rust crate for helping parse structs from binary data using ✨macro magic✨

用法

BinRead 使用 derive 宏来声明性地定义结构体的二进制解析方法。

#[derive(BinRead)]
#[br(magic = b"DOG", assert(name.len() != 0))]
struct Dog {
    bone_pile_count: u8,

    #[br(big, count = bone_pile_count)]
    bone_piles: Vec<u16>,

    #[br(align_before = 0xA)]
    name: NullString
}

let mut reader = Cursor::new(b"DOG\x02\x00\x01\x00\x12\0\0Rudy\0");
let dog: Dog = reader.read_ne().unwrap();
assert_eq!(dog.bone_piles, &[0x1, 0x12]);
assert_eq!(dog.name.into_string(), "Rudy")

更多文档可以在这里找到

依赖

~1.5MB
~36K SLoC