Advertisement
Guest User

Untitled

a guest
Oct 20th, 2019
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.64 KB | None | 0 0
  1. fn i_from_slice<T>(slice: &[u8]) -> Option<T>
  2. {
  3. let n = std::mem::size_of::<T>();
  4. if slice.len() == n {
  5. let mut buf = vec![0; n];
  6. buf.copy_from_slice(slice);
  7. Some(unsafe { std::mem::transmute_copy(&buf) })
  8. } else {
  9. None
  10. }
  11. }
  12.  
  13. fn i_from_slice_v2<T>(slice: &[u8]) -> Option<T>
  14. {
  15. let n = std::mem::size_of::<T>();
  16. if slice.len() == n {
  17. Some(unsafe { std::mem::transmute_copy(&slice[0]) })
  18. } else {
  19. None
  20. }
  21. }
  22.  
  23. fn main() {
  24. let x = [0xFF,0xFF]; // should transmute to be 65535
  25. println!("{:?}", i_from_slice::<u16>(&x));
  26. println!("{:?}", i_from_slice_v2::<u16>(&x));
  27. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement