Maison >développement back-end >Golang >Comment puis-je convertir en toute sécurité un tableau C `[1024]C.char` en un tableau Go `[1024]byte` ?
Conversion d'un tableau de caractères C en tableau d'octets Go
Lorsque vous travaillez avec C et Go, il est parfois nécessaire d'effectuer une conversion entre les deux langages types de tableaux. Cette question explore la conversion d'un tableau C de type [1024]C.char en un type de tableau Go [1024]byte.
Impossible de convertir directement
Tentative pour effectuer une conversion d'interface entraîne une erreur :
cannot convert (*_Cvar_my_buf) (type [1024]C.char) to type [1024]byte
Cela est dû au fait que les deux types de tableaux sont fondamentalement différents en mémoire représentation.
Solution : Copier dans une tranche
Une méthode sûre et simple pour convertir le tableau C consiste à copier son contenu dans une tranche Go. Ceci peut être réalisé en utilisant le code suivant :
mySlice := C.GoBytes(unsafe.Pointer(&C.my_buff), C.BUFF_SIZE)
Ici, C.GoBytes convertit le tableau C en une tranche Go d'octets, qui peut être affectée à la variable mySlice.
Conversion non sécurisée
Si un accès direct à la mémoire est requis, il est possible de "caster" le tableau C en un tableau d'octets Go en utilisant unsafe.Pointer. Cependant, il s'agit d'une opération dangereuse qui doit être utilisée avec prudence :
mySlice := unsafe.Slice((*byte)(unsafe.Pointer(&C.my_buf)), C.BUFF_SIZE)
Cela convertit le tableau C en une tranche d'octets. Si un type de tableau est nécessaire, la tranche peut être convertie :
myArray := ([C.BUFF_SIZE]byte)(mySlice)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!