2013-05-04 45 views
12

我想包裝一個C函數,它需要一個指向非空字節緩衝區(的第一個元素)的char*。我試圖用CGo將它包裝在一個Go函數中,以便我可以將它傳遞給[]byte,但我不知道如何執行轉換。 C函數的簽名的簡化版本是從[]字節到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。)