Использование math.Float32fromBits()
Мы можем использовать math.Float32fromBits()
, чтобы получить значение float32
из его «двоичного» представления. Но чтобы его использовать, нам нужны 4-байтовые данные, упакованные в значение uint32
. Для этого мы можем использовать binary.ByteOrder.Uint32()
:
data := []byte{66, 106, 179, 86}
bits := binary.BigEndian.Uint32(data)
f := math.Float32frombits(bits)
fmt.Println(f)
Вывод (попробуйте на Go Playground ):
58.675133
Это решение быстрее, если мы просто хотим прочитать одно float32
значение.
Использование binary.Read()
Другой вариант - использовать binary.Read()
для заполнения значений фиксированного размера из io.Reader
. Если у нас есть данные в виде байтового среза, мы можем использовать bytes.NewBuffer()
, чтобы получить из него io.Reader
:
data := []byte{66, 106, 179, 86}
var f float32
err := binary.Read(bytes.NewBuffer(data), binary.BigEndian, &f)
fmt.Println(f, err)
Вывод (попробуйте на Go Playground ):
58.675133 <nil>
Это решение предпочтительнее, если нам нужно прочитать серию float32
значений из ввода.