Go で 16 進数の文字列を Float32 値に効率的に変換するにはどうすればよいですか?

DDD
リリース: 2024-11-23 19:23:13
オリジナル
645 人が閲覧しました

How to Efficiently Convert Hexadecimal Strings to Float32 Values in Go?

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

strconv.ParseFloat を使用して 16 進数文字列 (例: "0xC40C5253") を浮動小数点値に変換しようとすると失敗した場合、代替メソッドは次のようにする必要があります

1 つのアプローチでは、strconv.ParseUint() 関数を利用して、16 進表現のバイトを符号なし 32 ビット整数 (uint32) に解析します。これが必要なのは、一般に 4 バイト長の float 値を表すために使用される float32 では、バイトをそのように解釈する必要があるためです。

安全でないパッケージを使用すると、バイトを次のように作成することで float32 値として再解釈できます。 uint32 変数へのポインタとそれを float32 変数に代入します。

JimB が提案する別のアプローチは、math パッケージの組み込み関数 math.Float32frombits()。この関数は、符号なし 32 ビット整数を float32 値に直接変換し、安全でないポインター操作の必要性を排除します。

プロセスを示す更新されたコード スニペットは次のとおりです。

package main

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

func main() {
    s := "C40C5253"
    n, err := strconv.ParseUint(s, 16, 32)
    if err != nil {
        panic(err)
    }
    n2 := uint32(n)
    funsafe := *(*float32)(unsafe.Pointer(&n2))
    fmt.Println(funsafe)
    fmath := math.Float32frombits(n2)
    fmt.Println(fmath)
}
ログイン後にコピー

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート