【发布时间】:2016-12-09 02:58:56
【问题描述】:
假设我有这个 C 结构
struct Foo
{
uint8_t a;
// 3 bytes of padding
uint32_t b;
}
Go 中的等价物:
type Foo struct {
a uint8
b uint32
}
我有一个包含 C 结构的字节片:
data := []byte { 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04 }
将这些数据放入 Go 结构(反之亦然)的最佳方法是什么。
请注意,我确实想要根据正常的 C 规则进行填充。 C 结构未打包。
对于打包的结构,我可以这样做:
data := []byte { 0x01, 0x01, 0x02, 0x03, 0x04 }
f := Foo{}
buf := bytes.NewBuffer(data)
err := binary.Read(buf, binary.LittleEndian, &f)
什么是等价物,考虑到填充?
【问题讨论】:
-
不保证会有特定的填充。这显然与 C 无关。
-
如果你不想打包你的结构,你必须序列化和反序列化。