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


person Fred Foo    schedule 04.05.2013    source источник


Ответы (1)


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

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

делает свое дело. (Нашел это на golang-nuts.)

person Fred Foo    schedule 04.05.2013