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

DDD
Lepaskan: 2024-10-31 09:54:02
asal
387 orang telah melayarinya

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

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

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

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

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!

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
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!