cgo 返回字节数组完整代码示例
时间: 2024-01-01 17:48:07 浏览: 114
GoTidy:围绕 libtidy(HTML 整洁库)的 CGo 包装包
这里有一个完整的示例代码,展示了如何使用cgo在Go和C语言之间传递字节数组:
Go代码:
```go
package main
/*
#include <stdlib.h>
*/
import "C"
import (
"fmt"
"unsafe"
)
func main() {
str := "Hello, World!"
// 将Go字符串转换为C char数组
cstr := C.CString(str)
defer C.free(unsafe.Pointer(cstr))
// 调用C函数
length := C.int(len(str))
result := C.process_data((*C.char)(unsafe.Pointer(cstr)), length)
// 将C返回的字节数组转换回Go byte数组
goBytes := C.GoBytes(unsafe.Pointer(result), length)
fmt.Println(string(goBytes))
}
```
C代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* process_data(char* data, int length) {
printf("C received data: %s\n", data);
// 对数据进行一些处理
char* result = (char*)malloc(length);
memcpy(result, data, length);
return result;
}
```
在这个例子中,我们首先将Go字符串转换为C char数组,然后将其传递给C函数。C函数处理数据并返回一个字节数组指针,该指针由Go代码使用GoBytes函数转换回byte数组。最后,我们将这个byte数组转换成一个字符串并打印出来。
阅读全文