2013-05-04 2 views
12

Я хочу обернуть функцию C, которая принимает char*, указывая на (первый элемент) непустой буфер байтов. Я пытаюсь обернуть это в функцию Go с помощью CGo, чтобы передать его []byte, но я не знаю, как сделать преобразование. Упрощенная версия сигнатуры функции С являетсяОт [] byte to char *

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 описывает только обратную ситуацию.

ответ

26

Хорошо, что оказалось гораздо проще, чем я думал:

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

делает трюк. (Найдено по адресу: golang-nuts.)