安全性を犠牲にすることなく Go のエンディアンネスを決定するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-11-03 01:54:02
オリジナル
610 人が閲覧しました

How to Determine Endianness in Go without Sacrificing Safety?

Go でエンディアンを決定するための包括的なソリューション

マシンのエンディアンを決定するには、次の 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!