如何转换此C(数组)类型:
char my_buf[BUF_SIZE];
到此Go(数组)类型:
type buffer [C.BUF_SIZE]byte
?尝试进行界面转换会给我带来这个错误:
cannot convert (*_Cvar_my_buf) (type [1024]C.char) to type [1024]byte
答案 0 :(得分:8)
最简单,最安全的方法是将其复制到切片,而不是专门用于[1024]byte
mySlice := C.GoBytes(unsafe.Pointer(&C.my_buff), C.BUFF_SIZE)
要在没有副本的情况下直接使用内存,您可以"施放"通过unsafe.Pointer
。
mySlice := (*[1 << 30]byte)(unsafe.Pointer(&C.my_buf))[:int(C.BUFF_SIZE):int(C.BUFF_SIZE)]
// or for an array if BUFF_SIZE is a constant
myArray := *(*[C.BUFF_SIZE]byte)(unsafe.Pointer(&C.my_buf))
答案 1 :(得分:2)
使用C.my_buf的内容创建Go切片:
arr := C.GoBytes(unsafe.Pointer(&C.my_buf), C.BUF_SIZE)
创建Go数组...
var arr [C.BUF_SIZE]byte
copy(arr[:], C.GoBytes(unsafe.Pointer(&C.my_buf), C.BUF_SIZE))