Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menukar Bait Perduaan kepada Integer Bertanda dan Terapung dalam Go?

Bagaimana untuk Menukar Bait Perduaan kepada Integer Bertanda dan Terapung dalam Go?

DDD
DDDasal
2024-10-31 09:54:02379semak imbas

How to Convert Binary Bytes to Signed Integers and Floats in Go?

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!

Kenyataan:
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