将 cgo 数组转换为切片

目前,我这样做是为了将双打 CGO 数组转换为 float64 的切片:


doubleSlc := [6]C.double{}


// Fill doubleSlc


floatSlc := []float64{float64(doubleSlc[0]), float64(doubleSlc[1]), float64(doubleSlc[2]),

                      float64(doubleSlc[3]), float64(doubleSlc[4]), float64(doubleSlc[5])}

有没有一种不那么麻烦的方法来做同样的事情?我想这也可以看作是在 Go 中不同类型的切片/数组之间进行转换的一般方法。


慕标5832272
浏览 238回答 1
1回答

慕姐4208626

你有这样做的正常和安全的方式: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是有充分理由的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go