1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
use std::{
borrow::BorrowMut,
mem::{size_of, zeroed},
};
pub fn to_bytes<T>(val: &T) -> Vec<u8> {
let mut result = vec![];
let mut ptr = val as *const T as *const u8;
for _ in 0..size_of::<T>() {
unsafe {
result.push(*ptr);
ptr = ptr.add(1);
}
}
result
}
pub fn from_bytes<T>(bytes: &[u8]) -> T {
if bytes.len() != size_of::<T>() {
panic!();
}
let mut val: T = unsafe { zeroed() };
let mut ptr = val.borrow_mut() as *mut T as *mut u8;
for byte in bytes {
unsafe {
*ptr = *byte;
ptr = ptr.add(1);
}
}
val
}