5

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

2 に答える 2

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))
于 2014-12-17T19:00:47.377 に答える
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))
于 2014-12-17T19:01:59.443 に答える