【发布时间】:2014-12-09 22:06:06
【问题描述】:
我正在用 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)
}
【问题讨论】:
-
我建议先尝试在 go 中编写它。你不会在 go 中做这样的事情。除其他外,go 没有强制转换。
uint也不是 4 个字节。Conn.Read采用[]byte,它实际上是一个指向后备数组的智能大小的指针。只需在 go 中编写此内容,您就会有更好的时间。 -
您是否已经看过
encoding/gob包的内置二进制序列化?