Maison  >  Article  >  développement back-end  >  conversion de l'ordre des octets golang

conversion de l'ordre des octets golang

PHPz
PHPzoriginal
2023-05-14 15:03:37681parcourir

Golang est un langage de programmation moderne qui fournit un riche ensemble de fonctions et de types de données intégrés pour permettre aux programmeurs de gérer diverses tâches. La conversion endian est également une opération très importante. Cet article expliquera en profondeur comment effectuer une conversion endian dans Golang.

Qu'est-ce que l'ordre des octets ?

Dans le stockage informatique, un octet est la plus petite unité de stockage, et chaque octet est composé de 8 bits binaires. L'endianisme fait référence à l'ordre dans lequel les octets sont disposés en mémoire lors du stockage de données multi-octets telles que des entiers et des nombres à virgule flottante. Il existe deux types d’ordre des octets : big endian et little endian.

Le big-endian fait référence à la méthode de stockage dans laquelle l'octet de poids fort est en premier et l'octet de poids faible en dernier. Il est couramment utilisé dans la transmission réseau et dans le processeur de la plupart des ordinateurs. Par exemple, la représentation binaire du nombre 10 est 0000 1010. Si elle est stockée dans l'ordre big-endian, l'ordre dans la mémoire est : 0000 1010.

Le petit-boutiste est une méthode de stockage avec l'octet de poids faible en premier et l'octet de poids fort en dernier. Elle est couramment utilisée dans certaines architectures de processeur, telles que l'architecture Intel x86 et ARM. Par exemple, l'ordre du nombre 10 dans le stockage Little-Endian est : 1010 0000.

Conversion endian en Golang

En Golang, la conversion endian utilise principalement le package "encoding/binary" de la bibliothèque standard. Ce package fournit plusieurs fonctions pour convertir l'ordre des octets, notamment le décodage et l'encodage binaires, la conversion grand et petit endian, etc.

  1. Décodage binaire

La série de fonctions « Lire » du package « encodage/binaire » est utilisée pour décoder le flux d'octets dans le type de données correspondant. Parmi eux, la fonction "binary.Read" possède trois paramètres : le flux d'octets d'entrée, le pointeur vers l'objet cible et le type endian utilisé. Par exemple :

func main() {
    bytes := []byte{0x10, 0x27, 0x00, 0x00}
    var i int32
    err := binary.Read(bytes.NewReader(bytes), binary.LittleEndian, &i)
    if err != nil {
        log.Fatal("binary.Read failed:", err)
    }
    fmt.Println(i) // Output: 10000
}

Le code ci-dessus décode le flux d'octets [0x10, 0x27, 0x00, 0x00] dans l'ordre petit-boutiste en une variable i de type int32.

  1. Codage binaire

La série de fonctions "Ecrire" du package "encodage/binaire" est utilisée pour coder le type de données dans un flux binaire dans l'ordre d'octets spécifié. Parmi eux, la fonction "binary.Write" a trois paramètres : le flux d'octets de sortie, le type endian utilisé et la valeur à coder. Par exemple :

func main() {
    var i int32 = 10000
    buf := new(bytes.Buffer)
    err := binary.Write(buf, binary.LittleEndian, i)
    if err != nil {
        log.Fatal("binary.Write failed:", err)
    }
    fmt.Println(buf.Bytes()) // Output: [0x10 0x27 0x00 0x00]
}

Le code ci-dessus code la variable de type int32 i avec une valeur de 10000 dans un flux d'octets [0x10, 0x27, 0x00, 0x00] avec l'ordre des octets étant petit endian.

  1. Conversion big-endian

En plus du décodage et de l'encodage binaire ci-dessus, le package "encoding/binary" fournit également deux fonctions pour convertir l'ordre des octets : BigEndian et LittleEndian.

"BigEndian" encode et décode les types de données dans l'ordre des octets du réseau (big endian), tandis que "LittleEndian" encode et décode les types de données dans l'ordre petit endian. Par exemple :

func main() {
    var i int32 = 10000
    buf := new(bytes.Buffer)
    binary.Write(buf, binary.BigEndian, i)
    fmt.Println(buf.Bytes()) // Output: [0x27 0x10 0x00 0x00]

    buf.Reset()
    binary.Write(buf, binary.LittleEndian, i)
    fmt.Println(buf.Bytes()) // Output: [0x10 0x27 0x00 0x00]
}

Le code ci-dessus code la variable de type int32 i dans l'ordre big endian et little endian, et les flux d'octets de sortie sont respectivement [0x27, 0x10, 0x00, 0x00] et [0x10, 0x27, 0x00, 0x00].

Résumé

Le package "encoding/binary" de Golang fournit une multitude de fonctions pour la conversion de l'ordre des octets, y compris le décodage et l'encodage binaires, la conversion grand et petit endian, etc. En utilisant ces fonctions, les développeurs peuvent facilement effectuer une conversion endian et gérer facilement le stockage et la transmission de données multi-octets.

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