C/C++에서는 포인터를 통해서 전혀 다른 데이터형이라도 값을 수정할 수 있는데, 대표적으로 이미지 데이터를 4바이트 배열이나 1바이트 배열처럼 다루는 것처럼...

러스트도 C++를 대체하고자 나온 언어이니 이런 기능을 지원함.

union B{
a:u32,
rgb:[u8;4]
}
fn main() {
let mut a_pixel:u32 = 0;
let mut rgb =unsafe{std::mem::transmute::< _ , &mut [u8;4]>(&mut a_pixel)};
rgb[0] = 255;
rgb[1] = 200;
rgb[2] = 100;
println!("{:08x}",a_pixel);
let mut a_pixel:B = B{a:0u32};
unsafe{
a_pixel.rgb[0] = 255;
a_pixel.rgb[1] = 200;
a_pixel.rgb[2] = 100;
println!("{:08x}",a_pixel.a);
}
}


union은 어제 나온 따끈따끈한 새로운 표준이어서 하이라이팅이 안된다.

다만 이런 데이터형식을 바꾸는 일 자체가 안정된 일은 아니니 unsafe구문 안에서만 가능하다.