Подтвердить что ты не робот

От [] байт до char *

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

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

4b9b3361

Ответ 1

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

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

делает трюк. (Нашел это на golang-nuts.)