#binary-data #structs #write #helping #i32 #magic✨ #✨macro

binwrite

一个使用✨宏魔法帮助将结构体作为二进制数据写入的Rust crate。

8个版本

0.2.1 2020年2月7日
0.2.0 2020年2月7日
0.1.5 2019年12月11日
0.1.3 2019年11月3日

#2119 in 编码

Download history 532/week @ 2024-03-14 506/week @ 2024-03-21 1116/week @ 2024-03-28 729/week @ 2024-04-04 629/week @ 2024-04-11 598/week @ 2024-04-18 535/week @ 2024-04-25 497/week @ 2024-05-02 748/week @ 2024-05-09 546/week @ 2024-05-16 460/week @ 2024-05-23 739/week @ 2024-05-30 477/week @ 2024-06-06 721/week @ 2024-06-13 684/week @ 2024-06-20 515/week @ 2024-06-27

2,510 每月下载量
用于 20 个crate(13个直接使用)

MIT 许可证

19KB
225 代码行

binwrite

一个使用✨宏魔法帮助将结构体作为二进制数据写入的Rust crate。

用法

BinWrite使用一个derive宏来声明性地定义结构体的二进制写入方法。

基本示例

use binwrite::BinWrite;

#[derive(BinWrite)]
#[binwrite(little)]
struct Rect {
    x: i32,
    y: i32,
    #[binwrite(big)]
    size: (u16, u16),
}

fn main() {
    let rects = vec![
        Rect { x: 1, y: -2, size: (3, 4) },
        Rect { x: 20, y: 4, size: (5, 7) }
    ];
    let mut bytes = vec![];
    rects.write(&mut bytes).unwrap();
    assert_eq!(
        bytes,
        vec![
        //  [  x (little endian) ]  [  y (little endian) ]  [ size.0 ]  [ size.1 ]
            0x01, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x00, 0x03, 0x00, 0x04,
            0x14, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x07,
        ]
    );
}

更多示例可以在BinWrite文档中找到。

依赖

~1.5MB
~35K SLoC