2016-09-30 90 views
0

我想使用cgo。在C端我有包含32個字節的結構。如何將Go結構轉換爲C結構?

struct hash { 
    uint8_t bytes[32]; 
}; 

在圍棋大小我有非常相似的類型。

type Hash [32]bytes 

我想調用C函數void f(struct hash)Hash類型的實例。如果可能的話,我也想避免一個值的副本。

簡單賦值Chash C.struct_hash := hash不起作用:

不能使用哈希(散列類型)類型C.struct_hash在分配

回答

2

可以使用unsafe包鑄數據。 Go編譯器不能再檢查這裏的類型,因此您需要確保C.struct_hashHash之間的所有內容的大小和類型相同。

Chash := *(*C.struct_hash)(unsafe.Pointer(&hash)) 
0

考慮對齊在c 你不能簡單地做演員。 最好的方法應該是從c指定值1或去c。 但是這個過程很痛苦的是結構很大並且struct包含struct