这是一个简单的例子:package main//#include <stdio.h>//#include <strings.h>//#include <stdlib.h>/*typedef struct { unsigned char *data; unsigned int data_len;} Result;Result *foo() { Result *r = malloc(sizeof(Result)); r->data = (unsigned char *)malloc(10); r->data_len = 10; memset(r->data, 0, 10); r->data = (unsigned char *)strdup("xxx123"); r->data_len = 6; return r;}*/import "C"import ( "fmt" // "unsafe")func main() { result := C.foo() fmt.Printf("%v, %v, %v\n", result.data, string(*(result.data)), result.data_len)}结果我得到了这样的东西0x203970, x, 6指向data,的第一个字符data和大小的指针。但是我怎样才能得到实际data值,最好是作为 []byte 类型在 go 代码中使用它?换句话说 - 如何转换unsigned char *为[]byte?
1 回答
呼唤远方
TA贡献1856条经验 获得超11个赞
你可以用unsafe.Pointerand做到这一点C.GoStringN:
data := (*C.char)(unsafe.Pointer(result.data))
data_len := C.int(result.data_len)
fmt.Println(C.GoStringN(data, data_len))
还有最简单的方法:
data := (*C.char)(unsafe.Pointer(result.data))
fmt.Println(C.GoString(data))
- 1 回答
- 0 关注
- 170 浏览
添加回答
举报
0/150
提交
取消