En Go, lorsqu'il s'agit de structures de données C, il est souvent nécessaire de convertir entre Go correspondantes genres. L'une de ces conversions consiste à transformer un tableau C de caractères (char[1024]) en un tableau Go d'octets ([1024]byte).
Tenter directement une conversion entre ces types peut entraîner une erreur du type "Impossible convertir (*_Cvar_my_buf) (tapez [1024]C.char) en type [1024]byte". Pour surmonter cela, nous présentons deux approches :
L'approche recommandée consiste à convertir d'abord le tableau C en une tranche Go à l'aide de C.GoBytes() :
mySlice := C.GoBytes(unsafe.Pointer(&C.my_buf), C.BUFF_SIZE)
Cela renvoie une tranche Go ([]byte) représentant la mémoire pointée par le tableau C my_buf.
Alternativement, vous pouvez "caster" le pointeur du tableau C via un unsafe.Pointeur pour créer une tranche Go :
mySlice := unsafe.Slice((*byte)(unsafe.Pointer(&C.my_buf)), C.BUFF_SIZE)
Cette approche fournit un accès direct à la mémoire mais doit être manipulé avec précaution.
Pour obtenir le tableau de [1024]octets souhaité, vous pouvez convertir le tranche :
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!