Go 结构体和字节数组之间的转换

我正在用 Go 编写一个客户端 - 服务器应用程序。我想在 Go 中执行类似 C 的类型转换。


例如在围棋中


type packet struct {

    opcode uint16

    data [1024]byte

}


var pkt1 packet

...

n, raddr, err := conn.ReadFromUDP(pkt1)  // error here

我还想执行类似 C 的 memcpy(),这将允许我将接收到的网络字节流直接映射到一个结构体。


例如上面收到的pkt1


type file_info struct {

    file_size uint32       // 4 bytes

    file_name [1020]byte

}


var file file_info

if (pkt1.opcode == WRITE) {

    memcpy(&file, pkt1.data, 1024)

}


当年话下
浏览 411回答 3
3回答

白衣染霜花

我相信它们可以完美运行。但就我而言,我对解析作为网络数据包接收的 []byte 缓冲区更感兴趣。我使用以下方法来解析缓冲区。var data []byte // holds the network packet receivedopcode := binary.BigEndian.Uint16(data) // this will get first 2 bytes to be interpreted as uint16 numberraw_data := data[2:len(data)] // this will copy rest of the raw data in to raw_data byte stream从结构体构造 []byte 流时,可以使用以下方法type packet struct {    opcode uint16    blk_no uint16    data   string}pkt := packet{opcode: 2, blk_no: 1, data: "testing"}var buf []byte = make([]byte, 50) // make sure the data string is less than 46 bytesoffset := 0binary.BigEndian.PutUint16(buf[offset:], pkt.opcode)offset = offset + 2binary.BigEndian.PutUint16(buf[offset:], pkt.blk_no)offset = offset + 2bytes_copied := copy(buf[offset:], pkt.data)我希望这提供了关于如何将 []byte 流转换为 struct 并将 struct 转换回 []byte 流的一般概念。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go