Bagaimana untuk Menentukan Endianness dalam Pergi tanpa Mengorbankan Keselamatan?

Barbara Streisand
Lepaskan: 2024-11-03 01:54:02
asal
608 orang telah melayarinya

How to Determine Endianness in Go without Sacrificing Safety?

Penyelesaian Komprehensif untuk Menentukan Endianness dalam Go

Untuk menentukan endianness mesin, seseorang boleh mempertimbangkan untuk menggunakan kod Go berikut:

<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>
Salin selepas log masuk

Walau bagaimanapun, pendekatan ini bergantung pada pakej yang tidak selamat, yang boleh membawa kepada kod yang tidak mudah alih dan berkemungkinan tidak selamat. Nasib baik, TensorFlow API for Go menyediakan penyelesaian alternatif yang turut menggunakan pakej yang tidak selamat tetapi dengan cara yang lebih mantap:

<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>
Salin selepas log masuk

Coretan kod ini mengambil kesempatan daripada fakta bahawa uint16 boleh disimpan dalam 2 -byte buffer, dan susunan bait akan bergantung pada endianness sistem. Dengan memeriksa susunan bait dalam penimbal, kod menentukan endian sistem dan menetapkan pembolehubah nativeEndian dengan sewajarnya.

Menggunakan kaedah ini menyediakan cara yang lebih dipercayai untuk menyemak endian dalam Go sambil tetap mematuhi had yang dikenakan oleh pakej yang tidak selamat.

Atas ialah kandungan terperinci Bagaimana untuk Menentukan Endianness dalam Pergi tanpa Mengorbankan Keselamatan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!