2013-05-04 3 views
12

Voglio racchiudere una funzione C che prende un char* puntando a (il primo elemento di) un buffer non vuoto di byte. Sto cercando di avvolgerlo in una funzione Go utilizzando CGo in modo che possa passarlo a []byte, ma non so come fare la conversione. Una versione semplificata della firma della funzione C èDa [] byte a char *

void foo(char const *buf, size_t n); 

ho provato passando un puntatore al primo byte nella fetta con

C.foo(&b[0], C.size_t(n)) 

Ciò non compilare, però:

cannot use &b[0] (type *byte) as type *_Ctype_char in function argument 

Quindi qual è la procedura corretta qui? go-wiki descrive solo la situazione inversa.

risposta

26

Ok, che si è rivelata essere molto più facile di quanto pensassi:

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

fa il trucco. (Trovato a golang-nuts.)