Golang结构体和[]byte相互转换
Golang数据结构与[]byte的相互转换,需要了解两个数据结构具体的底层实现,然后构造相同的数据结构进⾏转换即可。package main
import (
"fmt"
"unsafe"
)
type Data struct {
a,b int32
c map[string]interface{}
}
type SliceMock struct {
addr uintptr
len int
cap int
}
func main() {
d := Data{
a: 1,
b: 2,
c: map[string]interface{}{
"name": "thomas",
"age": 89,
},
}
/*
因[]byte底层数据结构与slicemock⼀致,需要构造⼀个完全⼀样
的数据结构进⾏转换
*/
len := unsafe.Sizeof(d)
sliceMockTest := SliceMock{
结构体sizeofaddr: uintptr(unsafe.Pointer(&d)),
len : int(len),
cap : int(len),
}
structToByte := *(*[]byte)(unsafe.Pointer(&sliceMockTest))
fmt.Printf("structToByte: %T, %v\n", structToByte, structToByte)
/*
[]byte转换成数据结构,只需取出addr地址即可,然后转换成对应的
数据结构类型即可
*/
byteToStruct := *(*Data)(unsafe.Pointer(&structToByte[0]))
fmt.Println("byteToStuct: ", byteToStruct)
return
}
输出结果如下:
structToByte: []uint8, [100020005617450192000]
byteToStruct: {12 map[age:89 name:thomas]}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论