
IEEE-754 で 16 進文字列を浮動小数点値に変換する
問題:
16 進文字列 (例: "0xC40C5253") をIEEE-754 変換を使用した浮動小数点値strconv.ParseFloat 関数では困難であることが証明されています。代替のアプローチはありますか?
回答:
16 進文字列を浮動小数点数に効果的に変換するには、次の手順を検討してください:
-
決定ビット長: 入力 16 進文字列のビット長を指定します (例: float32 の場合は 32 ビット).
-
16 進文字列を UInt32 に解析します: strconv.ParseUint() を使用して、16 進文字列を符号なし 32 ビット整数 (uint32) に解析します。
-
に変換Float32: unsafe パッケージを利用して、uint32 を float32 ポインターとして再解釈します。
これらの手順を示すコード スニペットの例を次に示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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() 関数。安全でないパッケージの代わりに使用できます:
1 | f := math.Float32frombits(n2)
|
ログイン後にコピー
以上がGo で 16 進文字列を IEEE-754 浮動小数点値に効率的に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。