14

我想包装一个 C 函数,它char*指向一个非空字节缓冲区(的第一个元素)。我正在尝试使用 CGo 将其包装在 Go 函数中,以便可以将其传递 a []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只描述了相反的情况。

4

1 回答 1

29

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

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

成功了。(在golang-nuts找到这个。)

于 2013-05-04T15:41:14.827 回答