Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah anda menukar Go []bait kepada Little/Big-Endian Signed Integer atau Float?

Bagaimanakah anda menukar Go []bait kepada Little/Big-Endian Signed Integer atau Float?

DDD
DDDasal
2024-10-31 01:15:03267semak imbas

How do you convert Go []byte to Little/Big-Endian Signed Integer or Float?

Tukar Go []bait kepada Little/Big-Endian Signed Integer atau Float

Menukar data binari yang disimpan dalam []bait kepada jenis angka seperti integer bertanda atau terapung- nombor titik memerlukan pemahaman tentang endian. Endianness mentakrifkan susunan bait disimpan dalam ingatan, dengan dua format biasa ialah little-endian (bait paling tidak ketara dahulu) dan big-endian (bait paling ketara dahulu).

Sementara pakej binari Go menyediakan fungsi seperti LittleEndian.Uint16() untuk menukar []bait kepada integer tidak bertanda, tiada persamaan langsung untuk integer yang ditandatangani (Int16()). Ini kerana endian hanya mempengaruhi tafsiran data, bukan perwakilan sebenar dalam ingatan.

Untuk menukar integer yang tidak ditandatangani kepada integer yang ditandatangani, penukaran jenis mudah adalah mencukupi kerana ia berkongsi reka letak memori yang sama. Contohnya:

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

Begitu juga, anda boleh menukar integer yang tidak ditandatangani kepada nombor titik terapung menggunakan fungsi pakej matematik Float32frombits() dan Float64frombits().

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

Perduaan pakej juga menyediakan fungsi Baca() dan Tulis() yang boleh melakukan penukaran ini di bawah hud.

<code class="go">import "bytes"

b := []byte{0x18, 0x2d, 0x44, 0x54, 0xfb, 0x21, 0x09, 0x40}

buf := bytes.NewReader(b)
var pi float64
err := binary.Read(buf, binary.LittleEndian, &amp;pi)
if err != nil {
    fmt.Println("binary.Read failed:", err)
}
fmt.Println(pi)

// Using Read() produces the same result as using Uint64() and Float64frombits():
a := binary.LittleEndian.Uint64(b)
a2 := math.Float64frombits(a)
fmt.Println(a2)

// Output:
// 3.141592653589793
// 3.141592653589793</code>

Atas ialah kandungan terperinci Bagaimanakah anda menukar Go []bait kepada Little/Big-Endian Signed Integer atau Float?. 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