Die Bestimmung der Endianness eines Computers ist für die Datenmanipulation von entscheidender Bedeutung. In Go besteht eine Methode zur Überprüfung der Endianness darin, das unsichere Paket zu verwenden, um eine Ganzzahl in ein Byte umzuwandeln und ihren Wert zu analysieren.
<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>
Während dieser Ansatz funktioniert, ist der Die Verwendung des unsicheren Pakets wirft Bedenken hinsichtlich der Portabilität und Sicherheit auf.
Eine verbesserte Methode zur Überprüfung der Endianness, die immer noch das unsichere Paket verwendet, wird von der TensorFlow Go-API von Google bereitgestellt:
<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>
Diese Lösung initialisiert einen Byte-Slice und setzt seine uint16-Darstellung auf 0xABCD. Durch die Untersuchung der resultierenden Bytereihenfolge wird die Endianness des Systems bestimmt. Dieser Ansatz ist robuster und auf die weit verbreitete Bibliothek von Google abgestimmt.
Das obige ist der detaillierte Inhalt vonSo bestimmen Sie die Endianness in Go: Eine vergleichende Analyse zweier Methoden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!