从转到cgo传递一个字节数组

时间:2015-07-11 12:56:16

标签: c go cgo

我有以下C代码

uint32_t cHash32(const char *s, size_t len) { return util::Hash32(s, len); }

我从go项目中调用它如下

func Hash32(s []byte) uint32 {
    return uint32(C.cHash32((*C.char)(unsafe.Pointer(&s)),   C.size_t(len(s))))
}

不知怎的,结果破了。

当传递“hi”时,预期结果应该是4063302914,根据python绑定到同一个库(google的farmhash)。

我想假设s可以翻译成* C.char有点天真不是吧!

如何将s的内容作为* C.char传递?

1 个答案:

答案 0 :(得分:1)

是的,您可以通过C.CString在Go中创建* C.char。谷歌游乐场不允许使用cgo,因此您需要下载此链接并在本地运行才能使用它。

http://play.golang.org/p/inthA1i0C2

将字节切片转换为字符串,然后转换为* char C.CString(string([]byte("bytes")))