マシンのエンディアンを決定するには、次の Go コードを使用することを検討できます。
<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>
ただし、このアプローチは安全でないパッケージに依存しているため、移植性がなく、安全でない可能性のあるコードが生成される可能性があります。幸いなことに、Go 用 TensorFlow API は、安全でないパッケージを利用する代替ソリューションを提供しますが、より堅牢な方法です:
<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>
このコード スニペットは、uint16 が 2 に格納できるという事実を利用しています。 -byte バッファーであり、バイトの順序はシステムのエンディアンによって異なります。バッファー内のバイトの配置を調べることにより、コードはシステムのエンディアンを決定し、それに応じてネイティブEndian 変数を設定します。
このメソッドを利用すると、課せられた制限を守りながら、Go でエンディアンをチェックするより信頼性の高い方法が提供されます。安全でないパッケージによるものです。
以上が安全性を犠牲にすることなく Go のエンディアンネスを決定するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。