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 在 无标准库
每月60次下载
在 5 个包中使用 (通过 xoodoo)
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员工维护,因此您可能不会受到太多的指责。