【发布时间】:2015-07-23 12:00:14
【问题描述】:
我有以下 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”时,根据 python 绑定到同一库(谷歌的farmhash),预期结果应该是 4063302914。
我想假设 s 可以翻译成 *C.char 有点幼稚,不是吗!
如何将 s 的内容作为 *C.char 传递?
【问题讨论】:
-
“结果不知何故坏了”...
-
改进的描述
-
尝试将
unsafe.Pointer(&s)替换为unsafe.Pointer(&s[0])。 FWIW,Go binding for farmhash 已经存在。 -
::用于命名空间限定的代码看起来不太像 C。