从[] byte到char *

时间:2013-05-04 15:37:12

标签: c pointers go cgo

我想要包装一个C函数,该函数将char*指向非空字节缓冲区(的第一个元素)。我正在尝试使用CGo将它包装在Go函数中,以便我可以将它传递给[]byte,但我不知道如何进行转换。 C函数签名的简化版本是

void foo(char const *buf, size_t n);

我尝试使用

将指针传递给切片中的第一个byte
C.foo(&b[0], C.size_t(n))

但是不能编译:

cannot use &b[0] (type *byte) as type *_Ctype_char in function argument

那么这里的正确程序是什么? go-wiki仅描述了相反的情况。

1 个答案:

答案 0 :(得分:27)

好吧,结果比我想象的容易得多:

(*C.char)(unsafe.Pointer(&b[0]))

诀窍。 (在golang-nuts找到了。)