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
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)
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)
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)
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!