在Go 中,處理C 資料結構時,經常需要在對應的Go 之間進行轉換型。其中一個轉換是將 C 字元陣列 (char[1024]) 轉換為 Go 位元組陣列 ([1024]byte)。
直接嘗試在這些類型之間進行轉換可能會導致類似「cannot將 (*_Cvar_my_buf)(類型 [1024]C.char)轉換為類型 [1024]byte」。為了克服這個問題,我們提出了兩種方法:
建議的方法是先使用C.GoBytes() 將C 陣列轉換為Go 切片:
mySlice := C.GoBytes(unsafe.Pointer(&C.my_buf), C.BUFF_SIZE)
這會回傳一個Go 切片([]byte),表示C my_buf指向的記憶體
或者,您可以透過unsafe.Pointer “轉換”C 陣列的指標來建立Go 切片:
mySlice := unsafe.Slice((*byte)(unsafe.Pointer(&C.my_buf)), C.BUFF_SIZE)
此方法提供了對記憶體的直接訪問,但應小心處理。
取得所需的[1024]位元組數組,可以轉換切片:
myArray := ([C.BUFF_SIZE]byte)(mySlice)
以上是如何將 C [1024]C.char 陣列轉換為 Go [1024]byte 陣列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!