D
Size: a a a
D
Э
Ct
EB
struct Unpacked {
i: i8,
f: f32
}
impl Unpacked {
fn from_packed(pack: CppStruct) -> Self {
const SIZE: usize = mem::size_of<CppStruct>();
let buf: [u8; SIZE] = unsafe { mem::transmute(pack) };
Self { i: buf[0] as i8, f: f32::from_ne_bytes(buf[1..]);
}
}Э
let buf: [u8; N] писать #[repr(C)] Buf([u8; N], [u8; M], [u8; K]) и let buf: Buf = transmuteD
#![deny(safe_packed_borrows)] и горя не знаешьЭ
Э
D
#![deny(safe_packed_borrows)]EB

D
D
let f = packed.f; println!("{}", f);EB
D
let f = packed.f; println!("{}", f);D
println!("{}", { packed.f }); тоже катитЭ
В
#![deny(safe_packed_borrows)] и горя не знаешьforbid сразуAV
#[repr(packed)] на arm? при обращении к полю струтуры (но не к первому) все падает. при условии, что те же плюсы это осиливают и работает как надо