ホームページ >バックエンド開発 >Golang >Go で 16 進文字列を IEEE-754 浮動小数点値に効率的に変換するにはどうすればよいですか?

Go で 16 進文字列を IEEE-754 浮動小数点値に効率的に変換するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-23 16:18:17432ブラウズ

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

IEEE-754 で 16 進文字列を浮動小数点値に変換する

問題:
16 進文字列 (例: "0xC40C5253") をIEEE-754 変換を使用した浮動小数点値strconv.ParseFloat 関数では困難であることが証明されています。代替のアプローチはありますか?

回答:
16 進文字列を浮動小数点数に効果的に変換するには、次の手順を検討してください:

  1. 決定ビット長: 入力 16 進文字列のビット長を指定します (例: float32 の場合は 32 ビット).
  2. 16 進文字列を UInt32 に解析します: strconv.ParseUint() を使用して、16 進文字列を符号なし 32 ビット整数 (uint32) に解析します。
  3. に変換Float32: unsafe パッケージを利用して、uint32 を float32 ポインターとして再解釈します。

これらの手順を示すコード スニペットの例を次に示します。

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)
}

注:
あるいは、数学パッケージは、 uint32 値を float32 に変換するための組み込み math.Float32frombits() 関数。安全でないパッケージの代わりに使用できます:

f := math.Float32frombits(n2)

以上がGo で 16 進文字列を IEEE-754 浮動小数点値に効率的に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。