将结构布局为字节

时间:2019-03-16 20:43:21

标签: go

我找不到通过GO将结构布局到字节数组编程的方法。 我正在为GoBGP服务编程扩展。我想通过GoBGP API为路由设置社区。 More about BGP and communities

我的情况:

我正在尝试发送32位数字。首先,16位被解释为AS号,其他16位为社区。 API具有uint32的接口来设置所有这些数据。我想要一个简单的结构,例如:

type routeCommunity struct {
   AS        uint16
   Community uint16
}

我正在努力将此结构数据传递给uint32变量。我想将其布局为字节数组,然后可以从中制作uint32。

在C ++中,我将拥有一个指向char数组的结构指针,并继续使用该结构,最后,我将发送char数组。

如何使其在Golang中实现?

1 个答案:

答案 0 :(得分:2)

您可以使用“不安全”包将结构传递给uint32变量:

func (rc *routeCommunity) bits() uint32 {
    return *(*uint32)(unsafe.Pointer(rc))
}

https://play.golang.org/p/AQeeoYUn7o0

UPD:

请记住,位的位置取决于结构字段的顺序。 变量的低两个字节包含第一个字段值,高两个字节包含第二个字段值。