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

Susan Sarandon
リリース: 2024-11-27 03:03:10
オリジナル
229 人が閲覧しました

How Do I Convert a Hex String to an IEEE-754 Single-Precision Floating-Point Number in Go?

16 進数文字列を IEEE-754 Float 値に変換する

16 進数文字列を浮動小数点値に変換することは、特に標準ライブラリを使用する場合、困難な場合があります。単独で機能します。この記事では、IEEE-754 変換規格に基づいたソリューションを提供します。

まず、入力のビット長を決定することが重要です。この場合、16 進文字列の長さは 4 バイトであるため、float32 数値を表している可能性があります。

  1. 16 進表現からのバイトの解析

まず、バイトを解析します。を使用して、16 進数表現を符号なし 32 ビット整数 (uint32) に変換します。 strconv.ParseUint() 関数。この関数は uint64 を返すため、float32 のサイズに一致するように uint32 に変換する必要があります。

s := "C40C5253"
n, err := strconv.ParseUint(s, 16, 32)
if err != nil {
    panic(err)
}
n2 := uint32(n)
ログイン後にコピー
  1. バイトを IEEE-754 Float として解釈

16 進文字列からバイトを取得しても、それらは依然として整数として解釈されます。これらを IEEE-754 float として正しく解釈するには、unsafe パッケージを使用して uint32 変数へのポインターを作成し、それを float32 として逆参照します。

f := *(*float32)(unsafe.Pointer(&n2))
ログイン後にコピー
  1. 結果の出力

最後に、結果の float32 を出力できます。 value:

fmt.Println(f)
ログイン後にコピー

出力例:

-561.2863
ログイン後にコピー
  1. 代替メソッド

math パッケージは math.Float32frombits() 関数を提供します。 uint32 から float32 への変換を直接実行します:

f := math.Float32frombits(n)
ログイン後にコピー

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

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