Menukar Rentetan Hex kepada Nilai Terapung dalam IEEE-754
Walaupun menggunakan fungsi strconv.ParseFloat, menukar rentetan hex kepada nilai titik terapung boleh menimbulkan cabaran. Artikel ini meneroka kaedah alternatif untuk mencapai penukaran ini menggunakan strconv.ParseUint dan pakej tidak selamat.
Penjelasan Panjang Bit
Sebelum meneruskan penukaran, adalah penting untuk menentukan panjang bit rentetan hex input. Seperti yang dinyatakan dalam soalan, perwakilan hex yang disediakan mempunyai lapan digit, menunjukkan jenis data float32 yang berpotensi. Walau bagaimanapun, untuk memastikan ketepatan, adalah lebih baik untuk menjelaskan perkara ini dengan penyoal.
Menggunakan strconv.ParseUint
Untuk menghuraikan bait daripada rentetan hex, strconv.ParseUint boleh diambil bekerja. Walau bagaimanapun, memandangkan ia mengembalikan uint64 yang menduduki lapan bait dalam ingatan, ia mesti ditukar kepada uint32 untuk memadankan struktur empat bait float32.
s := "C40C5253" n, err := strconv.ParseUint(s, 16, 32) if err != nil { panic(err) } n2 = uint32(n)
Mentafsir Bait sebagai IEEE-754 Terapung Titik
Sekarang bait disimpan dalam n2 sebagai uint32, mereka perlu ditafsirkan sebagai bait nombor titik terapung IEEE-754. Pakej tidak selamat menyediakan cara untuk mengakses dan memanipulasi penunjuk memori, membolehkan kami mencipta float32 daripada bait uint32.
f := *(*float32)(unsafe.Pointer(&n2))
Kaedah Alternatif Menggunakan matematik.Float32frombits
Pakej matematik termasuk fungsi terbina dalam yang direka khusus untuk tujuan ini: matematik.Float32frombits. Ia secara langsung menterjemah nilai uint32 kepada float32, menawarkan pendekatan yang lebih mudah.
f := math.Float32frombits(n2)
Output
Menggunakan kedua-dua kaedah, rentetan heks sampel yang disediakan dalam soalan bertukar kepada -561.2863 apabila ditafsirkan sebagai float32. Menguji penyelesaian ini di Go Playground boleh menunjukkan lagi fungsinya.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menukar Rentetan Hex kepada Nilai Titik Terapung IEEE-754 dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!