cgo 返回 unsigned char* 字节数组的完整代码示例
时间: 2023-09-04 21:09:36 浏览: 220
C语言和go语言之间的交互操作方法
下面是一个使用cgo返回`unsigned char*`字节数组的完整代码示例:
```go
package main
// #include <stdlib.h>
import "C"
import (
"fmt"
"unsafe"
)
func main() {
data := []byte("hello world")
ptr := C.malloc(C.size_t(len(data)))
defer C.free(ptr)
// 将go字节数组复制到C分配的内存中
C.memcpy(ptr, unsafe.Pointer(&data[0]), C.size_t(len(data)))
// 将C指针转换为Go字节数组
dataCopy := C.GoBytes(ptr, C.int(len(data)))
fmt.Println(dataCopy)
}
```
在这个示例中,我们首先将要返回的字节数组作为Go字节数组创建。然后我们使用`C.malloc()`函数分配一块内存,这块内存的大小等于Go字节数组的长度。我们将Go字节数组复制到C分配的内存中,然后使用`C.GoBytes()`函数将C指针转换为Go字节数组。最后我们打印出Go字节数组以验证返回结果。
阅读全文