Maison  >  Article  >  développement back-end  >  Comment déterminer l'endianité dans Go sans le package non sécurisé ?

Comment déterminer l'endianité dans Go sans le package non sécurisé ?

DDD
DDDoriginal
2024-11-02 07:13:02544parcourir

How to Determine Endianness in Go Without the Unsafe Package?

Détermination de l'endianité en Go : alternatives aux packages non sécurisés

En Go, la détermination de l'endianité d'une machine est cruciale pour la gestion des données et la communication. Bien que le package non sécurisé fournisse une méthode pour cette tâche, il comporte des risques potentiels et des problèmes de portabilité.

Une solution privilégiée à ce problème consiste à utiliser une fonction de l'API TensorFlow de Google pour Go. Cette fonction s'appuie sur le package unsafe mais utilise une approche plus sûre en créant un tampon et en manipulant ses octets pour déterminer le caractère endianiste.

Voici l'extrait de code de l'API TensorFlow qui traite de la détection du caractère endianiste :

<code class="go">var nativeEndian binary.ByteOrder

func init() {
    buf := [2]byte{}
    *(*uint16)(unsafe.Pointer(&amp;buf[0])) = uint16(0xABCD)

    switch buf {
    case [2]byte{0xCD, 0xAB}:
        nativeEndian = binary.LittleEndian
    case [2]byte{0xAB, 0xCD}:
        nativeEndian = binary.BigEndian
    default:
        panic("Could not determine native endianness.")
    }
}</code>

Dans ce code :

  • La variable nativeEndian est définie pour stocker l'endianité du système.
  • Un tampon buf d'une taille de 2 octets est créé pour contenir les valeurs uint16.
  • Le package unsafe est utilisé pour convertir le pointeur mémoire du premier élément de buf en *uint16 et lui attribuer la valeur 0xABCD. Cela garantit que le tampon contient deux octets, représentant le nombre 0xABCD.
  • Une instruction switch compare l'ordre des octets de buf pour déterminer le caractère boutien du système.

En utilisant cette fonction , vous pouvez déterminer de manière fiable le caractère boutiste de votre machine tout en minimisant les risques associés au colis dangereux.

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