Maison > développement back-end > Golang > Comment convertir un tableau C [1024] C.char en un tableau Go [1024] octets ?

Comment convertir un tableau C [1024] C.char en un tableau Go [1024] octets ?

Susan Sarandon
Libérer: 2024-12-18 21:51:11
original
780 Les gens l'ont consulté

How to Convert a C [1024]C.char Array to a Go [1024]byte Array?

Conversion de C [1024]C.char en Go [1024]byte

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 :

Utiliser une tranche pour une conversion indirecte

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)
Copier après la connexion

Cela renvoie une tranche Go ([]byte) représentant la mémoire pointée par le tableau C my_buf.

Casting le pointeur pour la conversion directe

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)
Copier après la connexion

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)
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal