2013-05-04 68 views
12

Tôi muốn bọc hàm C mất char* trỏ tới (phần tử đầu tiên) một bộ đệm không trống rỗng của byte. Tôi đang cố gắng để bọc trong một chức năng Go bằng cách sử dụng CGo để tôi có thể vượt qua nó một []byte, nhưng tôi không biết làm thế nào để làm việc chuyển đổi. Một phiên bản đơn giản của chữ ký C chức năng làTừ [] byte sang char *

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

tôi đã cố gắng đi qua một con trỏ đến các byte đầu tiên trong lát với

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

Điều đó không có biên dịch, mặc dù:

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

Vậy thủ tục chính xác ở đây là gì? go-wiki chỉ mô tả tình huống ngược lại.

Trả lời

26

Ok, mà hóa ra là dễ dàng hơn nhiều so với tôi nghĩ:

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

hiện các trick. (Tìm thấy số này tại golang-nuts.)

Các vấn đề liên quan