Heim > Backend-Entwicklung > Golang > Wie kann ich ein C-Array „[1024]C.char' sicher in ein Go-Array „[1024]byte' konvertieren?

Wie kann ich ein C-Array „[1024]C.char' sicher in ein Go-Array „[1024]byte' konvertieren?

Susan Sarandon
Freigeben: 2024-12-06 07:22:11
Original
184 Leute haben es durchsucht

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

C-Char-Array in Go-Byte-Array konvertieren

Bei der Arbeit mit C und Go ist es manchmal notwendig, zwischen den beiden Sprachen zu konvertieren. Array-Typen. Diese Frage untersucht die Konvertierung eines C-Arrays vom Typ [1024]C.char in ein Go-Array vom Typ [1024]byte.

Direkte Konvertierung nicht möglich

Versuch Das Durchführen einer Schnittstellenkonvertierung führt zu einem Fehler:

cannot convert (*_Cvar_my_buf) (type [1024]C.char) to type [1024]byte
Nach dem Login kopieren

Dies liegt daran, dass sich die beiden Array-Typen im Speicher grundlegend unterscheiden Darstellung.

Lösung: In Slice kopieren

Eine sichere und unkomplizierte Methode zum Konvertieren des C-Arrays besteht darin, seinen Inhalt in ein Go-Slice zu kopieren. Dies kann mit dem folgenden Code erreicht werden:

mySlice := C.GoBytes(unsafe.Pointer(&C.my_buff), C.BUFF_SIZE)
Nach dem Login kopieren

Hier konvertiert C.GoBytes das C-Array in ein Go-Slice von Bytes, das der Variablen mySlice zugewiesen werden kann.

Unsichere Konvertierung

Wenn ein direkter Speicherzugriff erforderlich ist, ist es möglich, das C-Array in ein Go-Byte-Array „umzuwandeln“. mit unsicher.Pointer. Dies ist jedoch ein unsicherer Vorgang, der mit Vorsicht verwendet werden sollte:

mySlice := unsafe.Slice((*byte)(unsafe.Pointer(&C.my_buf)), C.BUFF_SIZE)
Nach dem Login kopieren

Dadurch wird das C-Array als Byte-Slice umgewandelt. Wenn ein Array-Typ benötigt wird, kann das Slice konvertiert werden:

myArray := ([C.BUFF_SIZE]byte)(mySlice)
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann ich ein C-Array „[1024]C.char' sicher in ein Go-Array „[1024]byte' konvertieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage