ホームページ >バックエンド開発 >Golang >C `[1024]C.char` 配列を Go `[1024]byte` 配列に安全に変換するにはどうすればよいですか?

C `[1024]C.char` 配列を Go `[1024]byte` 配列に安全に変換するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-06 07:22:11182ブラウズ

How Can I Safely Convert a C `[1024]C.char` Array to a Go `[1024]byte` Array?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。