Heim > Backend-Entwicklung > Golang > Wie kann man Endianness in Go bestimmen, ohne Einbußen bei der Sicherheit hinnehmen zu müssen?

Wie kann man Endianness in Go bestimmen, ohne Einbußen bei der Sicherheit hinnehmen zu müssen?

Barbara Streisand
Freigeben: 2024-11-03 01:54:02
Original
666 Leute haben es durchsucht

How to Determine Endianness in Go without Sacrificing Safety?

Eine umfassende Lösung zur Bestimmung der Endianness in Go

Um die Endianness einer Maschine zu bestimmen, kann man den folgenden Go-Code verwenden:

<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>
Nach dem Login kopieren

Dieser Ansatz basiert jedoch auf dem unsicheren Paket, was zu nicht tragbarem und potenziell unsicherem Code führen kann. Glücklicherweise bietet die TensorFlow-API für Go eine alternative Lösung, die ebenfalls das unsichere Paket nutzt, jedoch auf robustere Weise:

<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>
Nach dem Login kopieren

Dieses Code-Snippet macht sich die Tatsache zunutze, dass ein uint16 in einem 2. gespeichert werden kann -Byte-Puffer, und die Reihenfolge der Bytes hängt von der Endianness des Systems ab. Durch die Untersuchung der Anordnung der Bytes im Puffer bestimmt der Code die Endianness des Systems und legt die nativeEndian-Variable entsprechend fest.

Die Verwendung dieser Methode bietet eine zuverlässigere Möglichkeit, die Endianness in Go zu überprüfen und gleichzeitig die auferlegten Einschränkungen einzuhalten durch das unsichere Paket.

Das obige ist der detaillierte Inhalt vonWie kann man Endianness in Go bestimmen, ohne Einbußen bei der Sicherheit hinnehmen zu müssen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage