gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 01:10:19 27 4
gpt4 key购买 nike

我正在用 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)
}

最佳答案

unsafe.Pointer 是不安全的,您在这里实际上不需要它。使用 encoding/binary改为打包:

// Create a struct and write it.
t := T{A: 0xEEFFEEFF, B: 3.14}
buf := &bytes.Buffer{}
err := binary.Write(buf, binary.BigEndian, t)
if err != nil {
panic(err)
}
fmt.Println(buf.Bytes())

// Read into an empty struct.
t = T{}
err = binary.Read(buf, binary.BigEndian, &t)
if err != nil {
panic(err)
}
fmt.Printf("%x %f", t.A, t.B)

Playground

如您所见,它可以非常巧妙地处理大小和字节顺序。

关于struct - Go 结构和字节数组之间的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26372227/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com