Bagaimanakah Saya Boleh Menukar Rentetan Hex dengan Cekap kepada Nilai Titik Terapung IEEE-754 dalam Go?

Susan Sarandon
Lepaskan: 2024-11-23 16:18:17
asal
347 orang telah melayarinya

How Can I Efficiently Convert Hex Strings to IEEE-754 Floating-Point Values in Go?

Menukar Rentetan Hex kepada Nilai Terapung dalam IEEE-754

Masalah:
Menukar rentetan heks (cth., "0xC40") kepadaC5253 nilai titik terapung menggunakan penukaran IEEE-754 mempunyai terbukti mencabar dengan fungsi strconv.ParseFloat. Adakah terdapat pendekatan alternatif?

Jawapan:
Untuk menukar rentetan heks kepada nilai terapung dengan berkesan, pertimbangkan langkah berikut:

  1. Tentukan Panjang Bit: Tentukan panjang bit rentetan hex input (cth., 32-bit untuk float32).
  2. Parse Hex String to UInt32: Gunakan strconv.ParseUint() untuk menghuraikan rentetan hex menjadi integer 32-bit yang tidak ditandatangani (uint32).
  3. Tukar kepada Float32: Gunakan pakej tidak selamat untuk mentafsir semula uint32 sebagai penunjuk float32.

Berikut ialah contoh coretan kod yang menunjukkan langkah-langkah ini:

import (
    "fmt"
    "strconv"
    "unsafe"
)

func main() {
    s := "C40C5253"
    n, err := strconv.ParseUint(s, 16, 32)
    if err != nil {
        panic(err)
    }
    n2 := uint32(n)
    f := *(*float32)(unsafe.Pointer(&n2))
    fmt.Println(f)
}
Salin selepas log masuk

Nota:
Sebagai alternatif, pakej matematik menyediakan fungsi matematik terbina dalam.Float32frombits() untuk menukar nilai uint32 kepada float32, yang boleh digunakan dan bukannya pakej yang tidak selamat:

f := math.Float32frombits(n2)
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menukar Rentetan Hex dengan Cekap kepada Nilai Titik Terapung IEEE-754 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan