Maison  >  Article  >  développement back-end  >  Voici quelques titres basés sur des questions qui correspondent au contenu de votre article, en gardant à l'esprit le format « Comment faire » : * Comment convertir entre des structures et des tableaux d'octets dans Go ? * Allez Struct vers le tableau d'octets

Voici quelques titres basés sur des questions qui correspondent au contenu de votre article, en gardant à l'esprit le format « Comment faire » : * Comment convertir entre des structures et des tableaux d'octets dans Go ? * Allez Struct vers le tableau d'octets

Barbara Streisand
Barbara Streisandoriginal
2024-10-28 05:57:30418parcourir

Here are a few question-based titles  that fit the content of your article, keeping in mind the “How to” format:

* How Do You Convert Between Structs and Byte Arrays in Go? 
* Go Struct to Byte Array: Best Practices & Techniques
* How to Perform C-like M

Conversion entre des structures et des tableaux d'octets dans Go

Dans Go, vous pouvez rencontrer des situations où vous devez effectuer une conversion entre des structures et des tableaux d'octets, ou effectuez des opérations de type C telles que la conversion de type et la copie de mémoire. Cet article explore des solutions pour ces tâches.

Casting de type

Go ne prend pas en charge le cast de type C, mais vous pouvez utiliser le type unsafe.Pointer pour effectuer des tâches similaires. opérations. Pour convertir une structure en tableau d'octets, utilisez la fonction unsafe.Pointer() pour convertir l'adresse de la structure en pointeur :

<code class="go">type packet struct {
    opcode uint16
    data [1024]byte
}

var pkt1 packet

// Convert pkt1 to a byte array
byteArray := (*[unsafe.Sizeof(pkt1)]byte)(unsafe.Pointer(&pkt1))</code>

Pour reconvertir un tableau d'octets en structure, utilisez unsafe.Pointer () fonctionne à nouveau pour convertir le pointeur du tableau d'octets vers le type de structure souhaité :

<code class="go">// Convert byteArray back to a packet struct
pkt2 := *(**packet)(unsafe.Pointer(&byteArray))</code>

Copie de mémoire

While Go n'a pas d'équivalent direct du memcpy (), vous pouvez utiliser la fonction copy() pour effectuer des copies de mémoire. Pour copier les données d'un tableau d'octets vers une structure, vous pouvez utiliser la syntaxe suivante :

<code class="go">type file_info struct {
    file_size uint32       // 4 bytes
    file_name [1020]byte
}

var file file_info
copy(unsafe.Pointer(&file), pkt1.data)  // Copy data from pkt1.data to file</code>

Utilisation du package encoding/binary

Comme alternative à en utilisant unsafe.Pointer, vous pouvez utiliser le package encoding/binary pour gérer les conversions de type entre les structures et les tableaux d'octets. Ce package fournit des fonctions d'encodage et de décodage des données aux formats binaires, facilitant ainsi la gestion de l'endianité et de la taille des données :

<code class="go">// Convert a struct to a byte array
t := T{A: 0xEEFFEEFF, B: 3.14}
var buf bytes.Buffer
binary.Write(&buf, binary.BigEndian, t)  // Encode struct t to buf

// Convert a byte array to a struct
t2 := T{}
binary.Read(&buf, binary.BigEndian, &t2)  // Decode byte array buf into struct t2</code>

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!

Déclaration:
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