У меня есть следующий код 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))))
}
Почему-то результат сломан.
При передаче «привет» ожидаемый результат должен быть 4063302914 в соответствии с привязками python к той же библиотеке (farmhash от google).
Я предполагаю, что предположение, что s может быть переведено в *C.char, немного наивно, не так ли!
Как передать содержимое s как *C.char?
unsafe.Pointer(&s)
наunsafe.Pointer(&s[0])
. FWIW, привязка Go для farmhash уже существует. - person Tim Cooper   schedule 11.07.2015::
используется для квалификации пространства имен, не совсем похож на C. - person The Paramagnetic Croissant   schedule 11.07.2015