golang struct 和 byte互转

Posted yyrise

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang struct 和 byte互转相关的知识,希望对你有一定的参考价值。

相比于encoding, 使用unsafe性能更高

type MyStruct struct {
    A int
    B int
}

var sizeOfMyStruct = int(unsafe.Sizeof(MyStruct{}))

func MyStructToBytes(s *MyStruct) []byte {
    var x reflect.SliceHeader
    x.Len = sizeOfMyStruct
    x.Cap = sizeOfMyStruct
    x.Data = uintptr(unsafe.Pointer(s))
    return *(*[]byte)(unsafe.Pointer(&x))
}

func BytesToMyStruct(b []byte) *MyStruct {
    return (*MyStruct)(unsafe.Pointer(
        (*reflect.SliceHeader)(unsafe.Pointer(&b)).Data,
    ))
}

 

以上是关于golang struct 和 byte互转的主要内容,如果未能解决你的问题,请参考以下文章

Python里 int 和 bytes互转的方法

golang struct, map, json 之间的相互转换

golang 基础 —— 字符串 与 int int64 互转

golang 基础 —— 字符串 与 int int64 互转

转java中float与byte[]的互转 -- 不错

Java语言Int与byte[]互转详解分析