Function std::mem::transmute_copy

1.0.0 (const: unstable) · source ·
pub unsafe fn transmute_copy<Src, Dst>(src: &Src) -> Dst
Expand description

src 解释为具有 &Dst 类型,然后读取 src 而不移动包含的值。

这个函数将不安全地假设指针 src 通过将 &Src 转换为 &Dst 然后读取 &Dstsize_of::<Dst> 字节有效 (除了即使 &Dst 具有比 &Src 更严格的对齐要求也是正确的方式)。

它还将不安全地创建所包含值的副本,而不是移出 src

如果 SrcDst 具有不同的大小,这不是编译时错误,但强烈建议仅在 SrcDst 具有相同大小的情况下调用此函数。如果 Dst 大于 Src,这个函数会触发 undefined behavior

Examples

use std::mem;

#[repr(packed)]
struct Foo {
    bar: u8,
}

let foo_array = [10u8];

unsafe {
    // 从 'foo_array' 复制数据并将其视为 'Foo'
    let mut foo_struct: Foo = mem::transmute_copy(&foo_array);
    assert_eq!(foo_struct.bar, 10);

    // 修改复制的数据
    foo_struct.bar = 20;
    assert_eq!(foo_struct.bar, 20);
}

// 'foo_array' 的内容不应更改
assert_eq!(foo_array, [10]);
Run