Angenommen, ich habe diese C structCopy Bytedatenfeld struct to Go für struct padding accounting
struct Foo
{
uint8_t a;
// 3 bytes of padding
uint32_t b;
}
und sein Äquivalent in Go:
type Foo struct {
a uint8
b uint32
}
Und I ein Byte Scheibe haben, die das C struct enthält :
data := []byte { 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04 }
Was ist der beste Weg, um diese Daten in die Go-Struktur (und umgekehrt) zu bekommen.
Beachten Sie, dass ich Padding gemäß den normalen C-Regeln wollen. Die C-Struktur ist nicht gepackt.
Für verpackte structs ich so etwas tun könnte:
data := []byte { 0x01, 0x01, 0x02, 0x03, 0x04 }
f := Foo{}
buf := bytes.NewBuffer(data)
err := binary.Read(buf, binary.LittleEndian, &f)
Was das Äquivalent ist, padding berücksichtigt?
Es gibt keine Garantie, es verwenden wird eine bestimmte Auffüllung. Und das hängt offenbar nicht mit C. zusammen. – Olaf
Sie müssen serialisieren und deserialisieren, wenn Sie Ihre Strukturen nicht packen wollen. – LPs