#serialization #bit-fields #struct #pack-unpack #bitfields

byte_struct

以打包或位字段布局将结构体打包和解包为原始字节

13个版本 (8个破坏性更新)

0.9.0 2023年3月18日
0.8.0 2022年7月21日
0.7.1 2021年8月21日
0.6.1 2021年3月2日
0.4.2 2019年3月17日

#924 in 编码

Download history 73/week @ 2024-03-12 52/week @ 2024-03-19 45/week @ 2024-03-26 93/week @ 2024-04-02 44/week @ 2024-04-09 53/week @ 2024-04-16 56/week @ 2024-04-23 74/week @ 2024-04-30 69/week @ 2024-05-07 44/week @ 2024-05-14 88/week @ 2024-05-21 52/week @ 2024-05-28 48/week @ 2024-06-04 52/week @ 2024-06-11 343/week @ 2024-06-18 121/week @ 2024-06-25

每月572次下载
catnip中使用

MIT/Apache

24KB
357 代码行

Byte Struct

以打包或位字段布局将结构体打包和解包为原始字节。

示例

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);
}

许可证

许可协议为以下之一:

您可选择。

依赖关系

~295–750KB
~18K SLoC