2013-05-04 6 views
12

मैं एक सी फ़ंक्शन को लपेटना चाहता हूं जो char* को बाइट्स के एक गैर-खाली बफर को इंगित करता है (पहले तत्व)। मैं इसे सीओओ का उपयोग करके एक गो फ़ंक्शन में लपेटने की कोशिश कर रहा हूं ताकि मैं इसे []byte पास कर सकूं, लेकिन मुझे नहीं पता कि रूपांतरण कैसे करें। सी समारोह के हस्ताक्षर का एक सरलीकृत संस्करण,[] बाइट से चार *

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

मैं

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

कि संकलन नहीं करता है के साथ टुकड़ा में पहली byte के लिए सूचक गुजर करने की कोशिश की है, हालांकि:

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

तो यहां सही प्रक्रिया क्या है? go-wiki केवल विपरीत स्थिति का वर्णन करता है।

उत्तर

26

ठीक है, पता चला कि तुलना में मैंने सोचा था कि बहुत आसान होने के लिए:

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

काम कर देता है। (इसे golang-nuts पर मिला।)

संबंधित मुद्दे