gpt4 book ai didi

go - CGO 从 C ** float 得到一个 [][]float32

转载 作者:IT王子 更新时间:2023-10-29 02:06:27 26 4
gpt4 key购买 nike

我正在尝试使用 C 兼容 header 调用 C++ 库中的函数,这需要我传入一个 4x4 矩阵以供其填充。

我的 Go 函数定义如下所示:

func GetMatrix(matrix [][]float32)

<罢工>

func GetMatrix(matrix []float32)

c 头文件是这样定义的:

void getMatrix(const float **matrix)

我试过使用 C.GoBytes 来获取字节数组,但是从那里我有点迷路了,因为我必须从字节数组转到指针数组,然后我再次将其转换到一个字节数组,最后是一个 float 数组。

至少我认为这是我需要做的。

我见过用 C 数组数据替换底层 Go slice 的代码示例,但我相信在这些情况下,Go GC 不会收集它们。理想情况下,矩阵 [][]float32 的行为类似于普通的 Go slice 。

编辑:文档不正确,底层 C 类型实际上是一个 16 元素的 float 组。

那么问题就变成了,我可以将 C.GoBytes 与一个指向数组指针的指针一起使用吗?如果可以,我如何从 []byte 中获取一个 []float32?

最佳答案

已编辑 这会打印正确的内容

package main

/*
#include <stdio.h>
void getMatrix(const float **matrix){
float *m = (float *)matrix;
int i;
for(i = 0; i<9; i++) {
printf("%f\n",m[i]);
}
}
*/
import "C"
import "unsafe"

func main() {
a := []float32{1,2,3,4,5,6,7,8,9}
C.getMatrix((**C.float)(unsafe.Pointer(&a[0])))
}

关于go - CGO 从 C ** float 得到一个 [][]float32,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10728197/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com