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

DDD
Lepaskan: 2024-10-31 01:15:03
asal
266 orang telah melayarinya

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

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

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

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!

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!