Rust 是否有一种方法可以为不使用';与底层存储不匹配?

Rust 是否有一种方法可以为不使用';与底层存储不匹配?,rust,reference,mutable,unsafe,Rust,Reference,Mutable,Unsafe,考虑一个实现为[u8;2]的结构。是否可以为整个结构构造一个&mut u16可变引用?有安全的方法吗 作为措辞的另一种方式,是否有一种方法可以实现: fn ref_all(&mut[u8;2])->&mut u16 对于自定义类型,通常也有这样做的方法吗?没有完全安全的方法来做这件事,但是为切片定义了(及其不可变的对应项align_to),它适用于所有类型,是mem::transmute的大锤的更安全的替代方法: fn ref_all(x:&mut[u8;2])->&mut u16{ let(

考虑一个实现为
[u8;2]
的结构。是否可以为整个结构构造一个
&mut u16
可变引用?有安全的方法吗

作为措辞的另一种方式,是否有一种方法可以实现:

fn ref_all(&mut[u8;2])->&mut u16

对于自定义类型,通常也有这样做的方法吗?

没有完全安全的方法来做这件事,但是为切片定义了(及其不可变的对应项
align_to
),它适用于所有类型,是
mem::transmute
的大锤的更安全的替代方法:

fn ref_all(x:&mut[u8;2])->&mut u16{
let(前缀、块、后缀)=不安全的{x.align_to_mut::()};
//您不需要这些断言,但要知道块可能并不总是有元素
断言!(前缀.is_empty());
断言!(后缀.is_empty());
assert_eq!(chunks.len(),1);
&mut块[0]
}
对于
u16
s,这应该没问题,尽管由于数字的端性,它可能会导致与体系结构相关的行为。对于其他类型的人来说,这样做是非常危险的