Menukar data binari yang disimpan dalam []bait kepada jenis angka seperti integer bertanda atau terapung- nombor titik memerlukan pemahaman tentang endian. Endianness mentakrifkan susunan bait disimpan dalam ingatan, dengan dua format biasa ialah little-endian (bait paling tidak ketara dahulu) dan big-endian (bait paling ketara dahulu).
Sementara pakej binari Go menyediakan fungsi seperti LittleEndian.Uint16() untuk menukar []bait kepada integer tidak bertanda, tiada persamaan langsung untuk integer yang ditandatangani (Int16()). Ini kerana endian hanya mempengaruhi tafsiran data, bukan perwakilan sebenar dalam ingatan.
Untuk menukar integer yang tidak ditandatangani kepada integer yang ditandatangani, penukaran jenis mudah adalah mencukupi kerana ia berkongsi reka letak memori yang sama. Contohnya:
<code class="go">a := binary.LittleEndian.Uint16(sampleA) a2 := int16(a)</code>
Begitu juga, anda boleh menukar integer yang tidak ditandatangani kepada nombor titik terapung menggunakan fungsi pakej matematik Float32frombits() dan Float64frombits().
<code class="go">a := binary.LittleEndian.Uint64(sampleA) a2 := math.Float64frombits(a)</code>
Perduaan pakej juga menyediakan fungsi Baca() dan Tulis() yang boleh melakukan penukaran ini di bawah hud.
<code class="go">import "bytes" b := []byte{0x18, 0x2d, 0x44, 0x54, 0xfb, 0x21, 0x09, 0x40} buf := bytes.NewReader(b) var pi float64 err := binary.Read(buf, binary.LittleEndian, &pi) if err != nil { fmt.Println("binary.Read failed:", err) } fmt.Println(pi) // Using Read() produces the same result as using Uint64() and Float64frombits(): a := binary.LittleEndian.Uint64(b) a2 := math.Float64frombits(a) fmt.Println(a2) // Output: // 3.141592653589793 // 3.141592653589793</code>
Atas ialah kandungan terperinci Bagaimanakah anda menukar Go []bait kepada Little/Big-Endian Signed Integer atau Float?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!