请问如何将以下 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
[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))
arr := C.GoBytes(unsafe.Pointer(&C.my_buf), C.BUF_SIZE)
To create a Go array...
var arr [C.BUF_SIZE]byte
copy(arr[:], C.GoBytes(unsafe.Pointer(&C.my_buf), C.BUF_SIZE))
DEFINE
视为常量。在这种情况下确实有效。 - JimBC.GoBytes
会返回一个指向底层 C 数组的 []byte
。现在我明白它确实会复制一份。 - Attila O.
C.BUF_SIZE
是一个常数,所以我可以在 typedef 中使用它。另外,为什么要将其转换为指向一个巨大数组的指针? - Attila O.