Go では、C データ構造を扱うときに、対応する Go 間の変換が必要になることがよくあります。種類。このような変換の 1 つは、C の文字配列 (char[1024]) を Go のバイト配列 ([1024]byte) に変換することです。
これらの型間で直接変換しようとすると、「できません」のようなエラーが発生する可能性があります。 (*_Cvar_my_buf) ([1024]C.char 型) を [1024]byte 型に変換します。これを克服するために、2 つのアプローチを紹介します。
推奨されるアプローチは、まず C.GoBytes():
mySlice := C.GoBytes(unsafe.Pointer(&C.my_buf), C.BUFF_SIZE)これは、C my_buf が指すメモリを表す Go スライス ([]byte) を返します。 array.直接変換のためのポインタのキャストまた、unsafe.Pointer を介して C 配列のポインタを「キャスト」して、Go スライスを作成することもできます:
mySlice := unsafe.Slice((*byte)(unsafe.Pointer(&C.my_buf)), C.BUFF_SIZE)このアプローチはメモリへの直接アクセスを提供しますが、慎重に扱う必要があります。必要なデータを取得するには[1024]バイト配列、スライスを変換できます:
以上がC [1024]C.char 配列を Go [1024]byte 配列に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。