2013-05-04 13 views
12

Ich möchte eine C-Funktion umbrechen, die eine char* verweist auf (das erste Element von) einen nicht leeren Puffer von Bytes. Ich versuche, das in eine Go-Funktion mit CGo zu wickeln, so dass ich es []byte übergeben kann, aber ich weiß nicht, wie man die Umwandlung durchführt. Eine vereinfachte Version der Unterschrift des C-Funktion istVon [] Byte zu char *

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

Ich habe versucht, mit

einen Zeiger auf das erste byte in der Scheibe vorbei
C.foo(&b[0], C.size_t(n)) 

Das ist nicht, obwohl nicht kompiliert:

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

Also, was ist das korrekte Verfahren hier? Die go-wiki beschreibt nur die umgekehrte Situation.

Antwort

26

Ok, das viel leichter zu sein, stellte sich heraus, als ich dachte:

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

funktioniert der Trick. (Gefunden unter golang-nuts.)

Verwandte Themen