In Go ist es beim Umgang mit C-Datenstrukturen oft notwendig, zwischen entsprechenden Go zu konvertieren Typen. Eine solche Konvertierung ist die Umwandlung eines C-Arrays aus Zeichen (char[1024]) in ein Go-Array aus Bytes ([1024]Byte).
Der direkte Versuch, zwischen diesen Typen zu konvertieren, kann zu einem Fehler wie „kann nicht“ führen Konvertieren Sie (*_Cvar_my_buf) (Typ [1024]C.char) in Typ [1024]Byte". Um dies zu überwinden, stellen wir zwei Ansätze vor:
Der empfohlene Ansatz besteht darin, zunächst das C-Array mit C.GoBytes() in ein Go-Slice zu konvertieren:
mySlice := C.GoBytes(unsafe.Pointer(&C.my_buf), C.BUFF_SIZE)
Dies gibt ein Go-Slice ([]Byte) zurück, das den Speicher darstellt, auf den das C-Array my_buf zeigt.
Alternativ können Sie den Zeiger des C-Arrays durch einen unsicheren Zeiger „umwandeln“, um ein Go-Slice zu erstellen:
mySlice := unsafe.Slice((*byte)(unsafe.Pointer(&C.my_buf)), C.BUFF_SIZE)
Dieser Ansatz bietet direkten Zugriff auf den Speicher sollte aber mit Vorsicht behandelt werden.
Um das gewünschte [1024]Byte-Array zu erhalten, können Sie das konvertieren Scheibe:
myArray := ([C.BUFF_SIZE]byte)(mySlice)
Das obige ist der detaillierte Inhalt vonWie konvertiere ich ein C [1024]C.char-Array in ein Go [1024]byte-Array?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!