Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use std::convert::TryInto;
- #[derive(Default, Debug, Clone, Copy)]
- #[repr(C, packed)]
- struct Header {
- timestamp_ns: i64,
- message_id: u16,
- message_version: u16,
- sequence_number: u16,
- reserved: u32,
- length_bytes: u16,
- }
- fn main() {
- let mut header = Header::default();
- header.message_id = 4;
- header.length_bytes = 42;
- let bytes: [u8; std::mem::size_of::<Header>()] = unsafe { std::mem::transmute(header) };
- println!("{:?}", bytes);
- // Now say you only have a byte slice
- let byte_slice: &[u8] = &bytes[..];
- // Get a fixed-size array from the slice
- let byte_array: &[u8; std::mem::size_of::<Header>()] = byte_slice.try_into().unwrap();
- let header_again: Header = unsafe { std::mem::transmute(*byte_array) };
- println!("{:?}", header_again);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement