IEEE-754 で 16 進数文字列を浮動小数点値に変換する
strconv.ParseFloat 関数を使用しているにもかかわらず、16 進数文字列を浮動小数点値に変換します課題を提起することができます。この記事では、strconv.ParseUint および安全でないパッケージを使用してこの変換を実現する別の方法について説明します。
ビット長の明確化
変換を続行する前に、次のことを確認することが重要です。入力 16 進文字列のビット長。質問で述べたように、提供された 16 進表現には 8 桁があり、float32 データ型の可能性を示しています。ただし、正確性を確保するには、質問者にこの点を明確にするのが最善です。
strconv.ParseUint の使用
16 進文字列からバイトを解析するには、strconv.ParseUint を使用します。雇用される。ただし、メモリ内で 8 バイトを占有する uint64 が返されるため、float32 の 4 バイト構造に一致するように uint32 に変換する必要があります。
s := "C40C5253" n, err := strconv.ParseUint(s, 16, 32) if err != nil { panic(err) } n2 = uint32(n)
バイトを IEEE-754 Floating として解釈するポイント
これで、バイトは n2 にuint32 の場合、IEEE-754 浮動小数点数のバイトとして解釈する必要があります。 unsafe パッケージは、メモリ ポインターにアクセスして操作する方法を提供し、uint32 バイトから float32 を作成できるようにします。
f := *(*float32)(unsafe.Pointer(&n2))
math.Float32frombits を使用した代替方法
math パッケージには、この目的のために特別に設計された組み込み関数 math.Float32frombits が含まれています。これは、uint32 値を float32 に直接変換し、より単純なアプローチを提供します。
f := math.Float32frombits(n2)
出力
いずれかの方法を使用して、質問で提供されているサンプル 16 進数文字列を使用します。 float32 として解釈されると、-561.2863 に変換されます。このソリューションを Go Playground でテストすると、その機能をさらに実証できます。
以上がGo で 16 進文字列を IEEE-754 浮動小数点値に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。