Function safe_transmute::to_bytes::transmute_to_bytes_unchecked_mut[][src]

pub unsafe fn transmute_to_bytes_unchecked_mut<S>(from: &mut S) -> &mut [u8]

Transmute a single mutable instance of an arbitrary type into a mutable slice of its bytes.

Safety

This function is very ill advised, since it can be exploited to break invariants of the source type. Any modification that leaves the data in an inconsistent state with respect to S results in undefined behavior.

Examples

An u32:

unsafe {
    // Little-endian
    assert_eq!(transmute_to_bytes_unchecked_mut(&mut 0x0123_4567),
               &mut [0x67, 0x45, 0x23, 0x01]);
}

An arbitrary type:

#[repr(C)]
#[derive(Debug, Eq, PartialEq)]
struct Gene {
    x1: u8,
    x2: u8,
}

let mut gene = Gene {
    x1: 0x42,
    x2: 0x69,
};

unsafe {
    let gene_data = transmute_to_bytes_unchecked_mut(&mut gene);
    assert_eq!(gene_data, &mut [0x42, 0x69]);
    gene_data[0] = 0xB0;
}

assert_eq!(gene, Gene {
    x1: 0xB0,
    x2: 0x69,
});