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 サイトの他の関連記事を参照してください。