将字节数组复制到Go struct accounting for struct padding

时间:2016-08-03 11:48:05

标签: go struct padding

假设我有这个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)

什么是等效的,考虑填充?

1 个答案:

答案 0 :(得分:1)

啊我意识到有一种相对简单的方法 - 只需在Go结构中显式添加虚拟填充字节:

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    Intent data = new Intent();
    data.putExtra("data", "12345678");
    setResult(RESULT_OK, data);
    finish();
}

然后您可以使用type Foo struct { a uint8 _ [3]byte b uint32 }