使用unsafe.Pointer将结构体转为[]byte
Posted hualou
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用unsafe.Pointer将结构体转为[]byte相关的知识,希望对你有一定的参考价值。
package main
import (
"fmt"
"unsafe"
)
type TestStructTobytes struct {
data int64
s int8
}
type SliceMock struct {
addr uintptr
len int
cap int
}
func main() {
var testStruct = &TestStructTobytes{100, ‘a‘}
Len := unsafe.Sizeof(*testStruct)
testBytes := &SliceMock{
addr: uintptr(unsafe.Pointer(testStruct)), //使用unsafe.Pointer作为桥梁使*转为uintptr符合[]byte的底层数据结构
cap: int(Len),
len: int(Len),
}
data := *(*[]byte)(unsafe.Pointer(testBytes)) //想将结构体转为[]byte需要结构体和byte有一样的数据结构SliceMock做到了这点
fmt.Println("[]byte is : ", data)
}
以上是关于使用unsafe.Pointer将结构体转为[]byte的主要内容,如果未能解决你的问题,请参考以下文章
强制定义 Go 结构以将 unsafe.Pointer() 转换为 C 结构
Golang学习笔记--unsafe.Pointer和uintptr
Go语言阅读小笔记,来自知呼达达关于unsafe.Pointer的分享.