この 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))
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))