Guest User

Untitled

a guest
Apr 24th, 2018
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.86 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "reflect"
  6. "unsafe"
  7. )
  8.  
  9. type NestType struct {
  10. S string
  11. I int
  12. }
  13.  
  14. type AllTypes struct {
  15. I int
  16. F float64
  17. Array []int
  18. M map[string]string
  19.  
  20. MM map[int]interface{}
  21. }
  22.  
  23. func AllTypesToBytes(v *AllTypes) []byte {
  24. var s reflect.SliceHeader
  25. size := (int)(unsafe.Sizeof(AllTypes{}))
  26. s.Len = size
  27. s.Cap = size
  28. s.Data = uintptr(unsafe.Pointer(v))
  29. return *(*[]byte)(unsafe.Pointer(&s))
  30. }
  31.  
  32. func BytesToAllTypes(v []byte) *AllTypes {
  33. return (*AllTypes)(unsafe.Pointer((*reflect.SliceHeader)(unsafe.Pointer(&v)).Data))
  34. }
  35.  
  36. func main() {
  37. a := &AllTypes{1, 2.0, []int{1, 2, 3, 4, 5}, map[string]string{"foo": "bar"}, map[int]interface{}{1: "abc", 2: 123}}
  38. b := AllTypesToBytes(a)
  39. fmt.Printf("origin data [%v]\n", a)
  40. fmt.Printf("binary data [%x] size = %d\n", b, len(b))
  41. x := BytesToAllTypes(b)
  42. fmt.Printf("bytes to struct [%v]\n", x)
  43. }
Add Comment
Please, Sign In to add comment