Menukar Tatasusunan Byte kepada Integer Bertanda dan Terapung dalam Go
Dalam Go, pakej binari menawarkan fungsi untuk menukar integer yang tidak ditandatangani daripada []bait tatasusunan, seperti binari.LittleEndian.Uint16() dan binari.BigEndian.Uint32(). Walau bagaimanapun, tiada persamaan langsung untuk integer atau apungan yang ditandatangani.
Sebab Ketiadaan Fungsi Penukaran Integer Ditandatangani
Ketiadaan fungsi penukaran integer yang ditandatangani adalah disebabkan terutamanya kepada fakta bahawa mentafsir perwakilan binari sebagai nilai yang ditandatangani atau tidak ditandatangani adalah masalah logik pengaturcaraan. Tatasusunan []bait itu sendiri mengandungi hanya data binari mentah, yang boleh ditafsirkan sebagai sama ada ditandatangani atau tidak ditandatangani bergantung pada keperluan aplikasi.
Cara Menukar kepada Integer Bertandatangan
Untuk menukar nilai integer yang tidak ditandatangani kepada integer yang ditandatangani, penukaran jenis mudah boleh digunakan. Memandangkan susun atur memori integer yang tidak ditandatangani dan ditandatangani dengan saiz yang sama adalah sama, menukar a daripada uint16 kepada int16 menggunakan int16(a) akan mengekalkan perwakilan binari asal sambil memberikan tanda yang sesuai.
Menukar kepada Terapung
Menukar daripada integer tidak bertanda kepada terapung memerlukan lebih sedikit penglibatan. Pakej matematik menyediakan fungsi untuk tujuan ini: math.Float32frombits() dan math.Float64frombits(). Sebaliknya, math.Float32bits() dan math.Float64bits() boleh digunakan untuk mendapatkan perwakilan integer yang tidak ditandatangani bagi nilai float.
Penggunaan Binary.Read() dan Binary.Write()
Pakej binari juga termasuk fungsi Baca() dan Tulis() yang boleh melaksanakan penukaran ini dengan lebih cekap di bawah hud. Fungsi ini membolehkan anda membaca terus ke dalam nilai yang ditaip tanpa memerlukan penukaran jenis perantaraan.
Contoh Menggunakan Binary.Read() untuk Penukaran Terapung
Pertimbangkan perkara berikut contoh:
<code class="go">b := []byte{0x18, 0x2d, 0x44, 0x54, 0xfb, 0x21, 0x09, 0x40} var pi float64 buf := bytes.NewReader(b) err := binary.Read(buf, binary.LittleEndian, &pi) if err != nil { fmt.Println("binary.Read failed:", err) } fmt.Println(pi) // Output: 3.141592653589793</code>
Atas ialah kandungan terperinci Bagaimanakah saya boleh menukar tatasusunan bait kepada integer dan terapung yang ditandatangani dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!