C char 配列を Go バイト配列に変換する
C と Go を使用する場合、2 つの言語間で変換する必要がある場合があります。配列型。この質問では、[1024]C.char 型の C 配列から Go 配列型 [1024]byte への変換について説明します。
直接変換できません
試行中インターフェイス変換を実行すると、エラーが発生します:
cannot convert (*_Cvar_my_buf) (type [1024]C.char) to type [1024]byte
これは、2 つの配列型が次のとおりであるためです。メモリ表現が根本的に異なります。
解決策: スライスにコピー
C 配列を変換する安全で簡単な方法の 1 つは、その内容を 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 配列をバイトのスライスとしてキャストします。配列型が必要な場合は、スライスを変換できます:
以上がC `[1024]C.char` 配列を Go `[1024]byte` 配列に安全に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。