Rust中Struct与`&[u8]`的相互转换

1. Struct转&[u8]

  1. struct定义如下
#[repr(C)]
struct Row {
    id: u32,
    username: [u8; 32],
    email: [u8; 255],
}
  1. Struct转&[u8], 约束条件是Sized
pub unsafe fn serialize_row(src: &T) ->&[u8] {
        ::std::slice::from_raw_parts((src as *const T) as *const u8, ::std::mem::size_of::())      
    }

2. &[u8]转Struct

这里是Vec.

pub unsafe fn deserialize_row(src: Vec) ->  Row{
        std::ptr::read(src.as_ptr() as *const _)
     }

3. 注意

  1. &[u8]转为Vec会有性能问题. 毕竟是clone.
  2. 这里的问题是不能对Box进行有效的转换,

你可能感兴趣的:(rust)