//代码段一:message的占用空间大小固定
package main
import (
"bytes"
"encoding/binary"
"fmt"
)
type message struct{
id int32
len int32
data [4]byte //这个也可以是切片,但是如果是切片,需要解两次才能解成msg对象
}
type pack struct{
}
func(pck *pack)pack(data []byte) *message{
msg := &message{}
dataio := bytes.NewReader(data)
//:对于data这个字节数组,从低字节开始读,把读到的字节放进msg.len的地址为首的空间,因为这个空间就4个字节(int32)故而会读走4个字节
//!!!!注意,binary.Read(XX,XX,XX3) XX3这个地址对应的是一块空间,这就是为啥message结构体的第三个属性data我限定空间大小的原因
//:dataio流的指向在读完之后,会指向data的倒数第5个字节
binary.Read(dataio,binary.LittleEndian,&msg.id)
binary.Read(dataio,binary.LittleEndian,&msg.len)
binary.Read(dataio,binary.LittleEndian,&msg.data)
fmt.Println("----",msg)
return msg
}
func(pck *pack)unpack(msg *message) []byte{
databufio := bytes.NewBuffer([]byte{})
binary.Write(databufio,binary.LittleEndian,msg.id)
bina
3.记一个go语言字节数组和结构体转换:binary-obiect(obj的结构为byte)
最新推荐文章于 2024-07-03 10:59:52 发布
本文探讨了Go语言中如何进行字节数组与结构体之间的转换,涉及HTTP协议解析、JSON和XML数据格式的处理。重点强调在修改函数外部数据时使用指针的重要性。
摘要由CSDN通过智能技术生成