首頁 >後端開發 >Golang >如何安全地將 C `[1024]C.char` 陣列轉換為 Go `[1024]byte` 陣列?

如何安全地將 C `[1024]C.char` 陣列轉換為 Go `[1024]byte` 陣列?

Susan Sarandon
Susan Sarandon原創
2024-12-06 07:22:11179瀏覽

How Can I Safely Convert a C `[1024]C.char` Array to a Go `[1024]byte` Array?

將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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn