小编典典

如何将[1024] C.char转换为[1024] byte

go

如何转换此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

阅读 370

收藏
2020-07-02

共1个答案

小编典典

最简单,最安全的方法是将其复制到切片中,而不是专门复制到 [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))
2020-07-02