2016-09-30 7 views
0

私はcgoを使いたいです。 C側では、32バイトの構造体があります。Go structをC structに変換するには?

struct hash { 
    uint8_t bytes[32]; 
}; 

私は非常に似たタイプです。

type Hash [32]bytes 

IはHashタイプのインスタンスにC関数void f(struct hash)を呼び出したいです。可能であれば、私は価値のコピーを避けたいと思います。

単純な割り当てChash C.struct_hash := hashは動作しません:

は、あなたがデータをキャストするunsafeパッケージを使用することができます割り当て

答えて

2

タイプC.struct_hashとしてハッシュ(型ハッシュ)を使用することはできません。 Goコンパイラはここで型をチェックすることができなくなるので、すべてのサイズと型がC.struct_hashHashの間で同じであることを確認するのはあなた次第です。

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

では、単にキャストを行うことはできません。 最良の方法は、cから1に値1を割り当てて、cに行くか、cに移動する必要があります。 しかし、このプロセスは苦痛です。構造体が大きく、構造体に構造体が含まれています

関連する問題