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

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

Susan Sarandon
Susan Sarandon原創
2024-12-18 21:51:11782瀏覽

How to Convert a C [1024]C.char Array to a Go [1024]byte Array?

將C [1024]C.char 轉換為Go [1024]byte

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

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