#byte #struct #derive #partial-eq #u16 #macro #field

byte_struct_derive

byte_struct的派生宏

5个版本 (3个重大变更)

0.9.0 2023年3月18日
0.4.2 2019年3月17日
0.4.0 2019年3月17日
0.2.0 2019年3月2日
0.1.0 2019年3月2日

#27 in #u16

Download history 91/week @ 2024-03-11 65/week @ 2024-03-18 46/week @ 2024-03-25 106/week @ 2024-04-01 50/week @ 2024-04-08 68/week @ 2024-04-15 64/week @ 2024-04-22 79/week @ 2024-04-29 74/week @ 2024-05-06 48/week @ 2024-05-13 59/week @ 2024-05-20 54/week @ 2024-05-27 59/week @ 2024-06-03 50/week @ 2024-06-10 345/week @ 2024-06-17 140/week @ 2024-06-24

每月下载量599
用于2个crate(通过byte_struct

MIT/Apache

12KB
127

字节结构

使用打包或位域布局打包和解包结构为原始字节。

示例

use byte_struct::*;

bitfields!(
    #[derive(PartialEq, Debug)]
    GIFColorTableInfo: u8 {
        global_color_table_flag: 1,
        color_resolution: 3,
        sort_flag: 1,
        global_color_table_size: 3,
    }
);

#[derive(ByteStruct, PartialEq, Debug)]
#[byte_struct_le]
struct GIFLogicalScreenDescriptor {
    width: u16,
    height: u16,
    color_table_info: GIFColorTableInfo,
    background_color_index: u8,
    pixel_aspect_ratio: u8,
}

fn example() {
    assert_eq!(GIFLogicalScreenDescriptor::BYTE_LEN, 7);
    let raw_descriptor = [0x03, 0x00, 0x05, 0x00, 0xF7, 0x00, 0x00];
    let descriptor = GIFLogicalScreenDescriptor::read_bytes(&raw_descriptor[..]);
    assert_eq!(descriptor, GIFLogicalScreenDescriptor{
        width: 3,
        height: 5,
        color_table_info: GIFColorTableInfo {
            global_color_table_flag: 1,
            color_resolution: 3,
            sort_flag: 1,
            global_color_table_size: 7,
        },
        background_color_index: 0,
        pixel_aspect_ratio: 0,
    });
    let mut raw_another = [0; GIFLogicalScreenDescriptor::BYTE_LEN];
    descriptor.write_bytes(&mut raw_another[..]);
    assert_eq!(raw_descriptor, raw_another);
}

许可证

许可如下

任选其一。

依赖关系

~270–720KB
~17K SLoC