將C 字元陣列轉換為Go 位元組陣列
在使用C 和Go 時,有時需要在兩種語言之間進行轉換'數組類型。本題探討 [1024]C.char 類型的 C 陣列到 [1024]byte 類型的 Go 陣列的轉換。
無法直接轉換
嘗試執行介面轉換會導致錯誤:
cannot convert (*_Cvar_my_buf) (type [1024]C.char) to type [1024]byte
這是因為這兩種陣列型別本質上是記憶體表示不同。
解決方案:複製到切片
轉換 C 數組的一種安全且直接的方法是將其內容複製到 Go 切片。這可以使用以下程式碼來實現:
mySlice := C.GoBytes(unsafe.Pointer(&C.my_buff), C.BUFF_SIZE)
這裡,C.GoBytes 將 C 數組轉換為 Go 位元組切片,可以將其分配給變數 mySlice。
不安全轉換
如果需要直接記憶體訪問,可以將 C 數組「轉換」為使用 unsafe.Pointer 的 Go 位元組數組。然而,這是一個不安全的操作,應謹慎使用:
mySlice := unsafe.Slice((*byte)(unsafe.Pointer(&C.my_buf)), C.BUFF_SIZE)
這會將 C 數組轉換為位元組切片。如果需要陣列類型,可以轉換切片:
myArray := ([C.BUFF_SIZE]byte)(mySlice)
以上是如何安全地將 C `[1024]C.char` 陣列轉換為 Go `[1024]byte` 陣列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!