에 [1024] C.char를 변환하는 방법 :내가이 C (배열) 형식으로 변환하려면 어떻게해야 [1024] 바이트
char my_buf[BUF_SIZE];
을이 이동 (배열)에 입력 :
type buffer [C.BUF_SIZE]byte
? 사본없이
cannot convert (*_Cvar_my_buf) (type [1024]C.char) to type [1024]byte
에 [1024] C.char를 변환하는 방법 :내가이 C (배열) 형식으로 변환하려면 어떻게해야 [1024] 바이트
char my_buf[BUF_SIZE];
을이 이동 (배열)에 입력 :
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의 내용으로 이동 슬라이스를 만들려면 :
arr := C.GoBytes(unsafe.Pointer(&C.my_buf), C.BUF_SIZE)
가 이동 배열을 만들려면 ...
var arr [C.BUF_SIZE]byte
copy(arr[:], C.GoBytes(unsafe.Pointer(&C.my_buf), C.BUF_SIZE))
를 내가 특별히 배열을 원하는 아닌 슬라이스 . 이유 중 하나는 내가 사본을 만들고 싶다는 것입니다. 또한,'C.BUF_SIZE' *는 상수이기 때문에 typedef에서 사용할 수 있습니다. 또한 거대한 배열에 대한 포인터로 변환하는 이유는 무엇입니까? –
거대한 배열은 go 컴파일러가 유효한 크기를 허용하지만 실제로 할당되지는 않습니다 (다른 예제는 https://github.com/golang/go/wiki/cgo를 참조하십시오). – JimB
아아, 이제 네가 모자 라니, 신경 쓰지 마라. –