Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menukar Jenis Numerik kepada []bait dan Kembali dalam Go?

Bagaimana untuk Menukar Jenis Numerik kepada []bait dan Kembali dalam Go?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-30 21:42:03419semak imbas

How to Convert Numeric Types to []byte and Back in Go?

Menukar Jenis Numerik kepada []bait dan Kembali

Dalam Go, anda boleh menukar integer yang tidak ditandatangani kepada tatasusunan bait menggunakan kaedah Uint16() dan Uint32() bagi jenis binari.BigEndian dan binari.LittleEndian. Walau bagaimanapun, anda mungkin perasan ketiadaan kaedah Int16() atau Float32() yang setara.

Endianness dan Jenis Numerik

Endianness merujuk kepada susunan bait yang disimpan dalam ingatan untuk sesuatu tertentu jenis angka. Pakej perduaan Go menyediakan kefungsian untuk menukar antara endian yang berbeza.

Menukar kepada Integer Ditandatangani

Untuk menukar integer yang tidak ditandatangani kepada integer yang ditandatangani, anda boleh menggunakan penukaran jenis mudah. Susun atur memori bagi integer 16-bit yang tidak ditandatangani (uint16) dan integer 16-bit yang ditandatangani (int16) adalah sama. Oleh itu, anda boleh melakukan penukaran berikut:

<code class="go">a := binary.LittleEndian.Uint16(sampleA)
a2 := int16(a)</code>

Penukaran ini tidak mengubah perwakilan memori, hanya jenis.

Menukar kepada Nombor Titik Terapung

Menukar integer tidak ditandatangani kepada nombor terapung lebih terlibat sedikit. Pakej matematik Go menyediakan fungsi untuk menukar antara integer dan apungan yang tidak ditandatangani, seperti math.Float32frombits() dan math.Float64frombits().

<code class="go">a := binary.LittleEndian.Uint64(sampleA)
a2 := math.Float64frombits(a)</code>

Penukaran ini tidak memanipulasi nilai memori sebaliknya "melihat"nya sebagai jenis yang berbeza menggunakan pakej yang tidak selamat.

Menggunakan binary.Read() dan binary.Write()

Pakej binari juga menyediakan fungsi Read() dan Write(), yang melaksanakannya penukaran di bawah tudung. Anda boleh menggunakan fungsi ini untuk menukar antara jenis angka yang berbeza dan tatasusunan bait.

<code class="go">var pi float64
buf := bytes.NewReader(b)
err := binary.Read(buf, binary.LittleEndian, &pi)

// or

a := binary.LittleEndian.Uint64(b)
a2 := math.Float64frombits(a)</code>

Dalam contoh ini, tatasusunan bait input mengandungi nilai pi dalam format little-endian. Fungsi Read() menukar tatasusunan bait kepada nilai float64, manakala Uint64() dan Float64frombits() melakukan penukaran secara manual.

Atas ialah kandungan terperinci Bagaimana untuk Menukar Jenis Numerik kepada []bait dan Kembali 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