我有以下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传递?
答案 0 :(得分:1)
是的,您可以通过C.CString
在Go中创建* C.char。谷歌游乐场不允许使用cgo,因此您需要下载此链接并在本地运行才能使用它。
http://play.golang.org/p/inthA1i0C2
将字节切片转换为字符串,然后转换为* char C.CString(string([]byte("bytes")))
。