2015-10-25 3 views
4

Я работаю над проектом Go, и мне бы хотелось отправить значения float32 с помощью UDPSocket. То, что я не понимаю, - это лучший способ конвертировать эти числа в буфер байта перед их отправкой и как преобразовать их обратно в float32 после их получения.Отправить значения float32 по udp-сокету

На данный момент я превращающего float32 -> [] байт со следующей функцией, которую я нашел в Интернете, но я даже не уверен, что я получаю то, что я хочу:

func Float32bytes(float float32) []byte { 
    bits := math.Float32bits(float) 
    bytes := make([]byte, 4) 
    binary.LittleEndian.PutUint32(bytes, bits) 
    return bytes 
} 

Я до сих пор не знаю, как преобразовать их в float32.

ответ

4

Например,

package main 

import (
    "encoding/binary" 
    "fmt" 
    "math" 
) 

func Float32Bytes(float float32) []byte { 
    bits := math.Float32bits(float) 
    bytes := make([]byte, 4) 
    binary.LittleEndian.PutUint32(bytes, bits) 
    return bytes 
} 

func BytesFloat32(bytes []byte) float32 { 
    bits := binary.LittleEndian.Uint32(bytes) 
    float := math.Float32frombits(bits) 
    return float 
} 

func main() { 
    pi := float32(math.Pi) 
    b := Float32Bytes(pi) 
    f := BytesFloat32(b) 
    fmt.Println(f, f == pi, BytesFloat32(Float32Bytes(pi)) == pi) 
} 

Выход:

3.1415927 true true 
+0

Спасибо, что, кажется, работает хорошо. Я до сих пор не получил то, что мне нужно от моего кода, но конверсия работает! Большое спасибо! – Sync

Смежные вопросы