5个版本 (2个稳定版)

1.0.1 2024年3月17日
1.0.0 2023年8月31日
0.1.2 2021年7月1日
0.1.1 2020年4月6日
0.1.0 2020年4月6日

#55无标准库

Download history · Rust 包仓库 60/week @ 2024-04-01 · Rust 包仓库 15/week @ 2024-04-08 · Rust 包仓库 26/week @ 2024-04-15 · Rust 包仓库 28/week @ 2024-04-22 · Rust 包仓库 28/week @ 2024-04-29 · Rust 包仓库 14/week @ 2024-05-06 · Rust 包仓库 21/week @ 2024-05-13 · Rust 包仓库 21/week @ 2024-05-20 · Rust 包仓库 24/week @ 2024-05-27 · Rust 包仓库 20/week @ 2024-06-03 · Rust 包仓库 18/week @ 2024-06-10 · Rust 包仓库 16/week @ 2024-06-17 · Rust 包仓库 15/week @ 2024-06-24 · Rust 包仓库 27/week @ 2024-07-08 · Rust 包仓库 15/week @ 2024-07-15 · Rust 包仓库

每月60次下载
5 个包中使用 (通过 xoodoo)

MIT 协议

4KB

rawbytes

一个Rust包,可以将结构体视为普通的字节数组 (&[u8])。

非常简单。小巧。无依赖。

这是一个更安全的 slice::from_raw_parts_{mut}() 接口。

示例用法

use rawbytes::RawBytes;

#[repr(C, packed(4))]
struct Foo {
    x: [u32; 32],
}

#[test]
fn test() {
    let mut foo = Foo { x: [0; 32] };

    let foo_bytes = RawBytes::bytes_view(&foo);
    assert_eq!(foo_bytes.len(), 128);

    let foo_bytes = RawBytes::bytes_view_mut(&mut foo);
    foo_bytes[0] = 1;
    assert_eq!(foo.x[0], 1);
}

注意,结构体必须具有 C 表示形式,以确保新的Rust版本不会更改表示形式。

警告和替代方案

警告:此包包含两个实例的 unsafe 关键字,因为在Rust中没有其他方法实现此功能。尽管如此,您可能因为使用包含该关键字的包而受到指责。

一个替代方案是 zerocopy 包。它更大、更复杂、速度没有更快,并且也要求使用 unsafe 关键字。但是,它由一位Google员工维护,因此您可能不会受到太多的指责。

无运行时依赖