为了账号安全,请及时绑定邮箱和手机立即绑定

将 cgo 数组转换为切片

将 cgo 数组转换为切片

Go
慕标5832272 2022-01-04 10:44:41
目前,我这样做是为了将双打 CGO 数组转换为 float64 的切片:doubleSlc := [6]C.double{}// Fill doubleSlcfloatSlc := []float64{float64(doubleSlc[0]), float64(doubleSlc[1]), float64(doubleSlc[2]),                      float64(doubleSlc[3]), float64(doubleSlc[4]), float64(doubleSlc[5])}有没有一种不那么麻烦的方法来做同样的事情?我想这也可以看作是在 Go 中不同类型的切片/数组之间进行转换的一般方法。
查看完整描述

1 回答

?
慕姐4208626

TA贡献1852条经验 获得超7个赞

你有这样做的正常和安全的方式:


c := [6]C.double{ 1, 2, 3, 4, 5, 6 }

fs := make([]float64, len(c))

for i := range c {

        fs[i] = float64(c[i])

}

或者你可以作弊不可移植并执行以下操作:


c := [6]C.double{ 1, 2, 3, 4, 5, 6 }

cfa := (*[6]float64)(unsafe.Pointer(&c))

cfs := cfa[:]

如果C.double和float64是相同的底层类型,我们可以获取指向 C.double 数组的指针,不安全地将其转换为指向相同大小的 float64 数组的指针,然后获取该数组的一个切片。


当然,这unsafe是有充分理由的。


查看完整回答
反对 回复 2022-01-04
  • 1 回答
  • 0 关注
  • 237 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信