Maison > développement back-end > Golang > le corps du texte

Comment déterminer l'endianité en Go sans sacrifier la sécurité ?

Barbara Streisand
Libérer: 2024-11-03 01:54:02
original
610 Les gens l'ont consulté

How to Determine Endianness in Go without Sacrificing Safety?

Une solution complète pour déterminer l'endianité en Go

Afin de déterminer l'endianité d'une machine, on peut envisager d'utiliser le code Go suivant :

<code class="go">var i int = 0x0100
ptr := unsafe.Pointer(&i)
if 0x01 == *(*byte)(ptr) {
    fmt.Println("Big Endian")
} else if 0x00 == *(*byte)(ptr) {
    fmt.Println("Little Endian")
} else {
    // ...
}</code>
Copier après la connexion

Cependant, cette approche repose sur le package non sécurisé, ce qui peut conduire à un code non portable et potentiellement dangereux. Heureusement, l'API TensorFlow pour Go fournit une solution alternative qui utilise également le package unsafe mais de manière plus robuste :

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

func init() {
    buf := [2]byte{}
    *(*uint16)(unsafe.Pointer(&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>
Copier après la connexion

Cet extrait de code profite du fait qu'un uint16 peut être stocké dans un 2 -byte buffer, et l'ordre des octets dépendra du boutisme du système. En examinant la disposition des octets dans le tampon, le code détermine le caractère boutien du système et définit la variable nativeEndian en conséquence.

L'utilisation de cette méthode fournit un moyen plus fiable de vérifier le caractère boutien dans Go tout en respectant les limitations imposées. par le 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!

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!