Menukar Bait Perduaan kepada Integer Bertanda dan Terapung dalam Go
Dalam Go, pakej binari menyediakan kaedah untuk menukar kepingan bait ([]bait ) ke dalam integer yang tidak ditandatangani (cth., Uint16, Uint32). Walau bagaimanapun, tiada kaedah eksplisit untuk menukar hirisan bait kepada integer bertanda atau terapung.
Mengapa Peninggalan?
Ketiadaan kaedah penukaran integer dan apungan yang ditandatangani dalam pakej binari berkemungkinan disebabkan oleh fakta bahawa endianness mempengaruhi cara jenis angka ditafsirkan daripada bait. Endianness merujuk kepada susunan bait disimpan dalam ingatan. Bergantung pada seni bina sistem, bait boleh disusun dalam little-endian (bait paling tidak ketara dahulu) atau big-endian (bait paling ketara dahulu).
Penukaran kepada Integer Bertandatangan
Walaupun kekurangan kaedah khusus, penukaran []bait kepada integer bertanda boleh dicapai melalui penukaran jenis. Memandangkan integer yang tidak ditandatangani dan ditandatangani mempunyai reka letak memori yang sama, penukaran adalah mudah:
<code class="go">a := binary.LittleEndian.Uint16(sampleA) a2 := int16(a) // Convert to signed int16</code>
Begitu juga, anda boleh menukar nilai uint64 kepada nilai int64.
Penukaran kepada Terapung
Menukar integer yang tidak ditandatangani kepada terapung adalah lebih terlibat. Walaupun anda boleh mencuba penukaran jenis mudah, ia akan menyebabkan nilai berangka ditukar, bukan perwakilan memori.
Sebaliknya, gunakan fungsi yang disediakan oleh pakej matematik:
<code class="go">a := binary.LittleEndian.Uint64(sampleA) a2 := math.Float64frombits(a) // Convert to float64</code>
Untuk menukar nilai apungan kepada integer tidak bertanda dengan susun atur memori yang sama, gunakan:
<code class="go">a := math.Float64bits(a2) // Convert float64 to uint64</code>
Fungsi Kemudahan Baca() dan Tulis()
Pakej binari juga menyediakan Fungsi Read() dan Write() yang boleh melakukan penukaran ini di bawah hud. Contohnya:
<code class="go">var pi float64 buf := bytes.NewReader(sampleA) err := binary.Read(buf, binary.LittleEndian, &pi) if err != nil { panic(err) }</code>
Atas ialah kandungan terperinci Bagaimana untuk Menukar Bait Perduaan kepada Integer Bertanda dan Terapung dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!