Quiero convertir Float a una lista de bytes [Word8] (y viceversa). Veo que hay una clase almacenable que quizás podría usarse para esto, pero me gustaría evitar el uso de la mónada IO ya que esto no tiene nada que ver con IO.¿Cómo puedo convertir Float y [Word8]?
Respuesta
¿Qué es lo que quieres? Si desea convertir entre el Float y su representación de bit real, puede usar data-binary-ieee754 (usa Foreign.Storable
y unsafePerformIO
debajo del cofre) o cereal-ieee754. Este último no usa Storable
o IO
, escribe el valor en STUArray
, arroja la matriz y lee el valor del otro tipo. Ambos paquetes le dan una conversión de Float <-> Word32
(o Double <-> Word64
), la conversión de WordN
a [Word8]
es fácil.
Usted no quiere Almacenable que desee Binario. Vea el binary package.
Las instancias Float y Double usan las funciones de preludio "encodeFloat" y "decodeFloat", ya que son una forma independiente de implementación de conversión entre un valor de coma flotante y un par de enteros. Los dos enteros se convierten a bytes.
Recomiendo la biblioteca Data.Binary
.
Ver aquí:
Prelude Data.Binary> encode (13.7 :: Double)
Chunk "\SOH\SOH\NUL\NUL\NUL\NUL\NUL\NUL\NUL\affffff\ESC\255\255\255\255\255\255\255\207" Empty
Prelude Data.Binary Data.ByteString.Lazy> Data.ByteString.Lazy.unpack $ encode (13.7 :: Double)
[1,1,0,0,0,0,0,0,0,7,102,102,102,102,102,102,27,255,255,255,255,255,255,255,207]
Si usted se pregunta por qué la representación es tan grande, que es debido a la aplicación de la Binary
instancia para Float
y Double
utiliza decodeFloat
función:
decodeFloat :: RealFloat a => a -> (Integer, Int)
Esto se hace para mantener la implementación tan genérica como el Informe Haskell (que no especifica IEEE754 ni nada de eso). Para obtener la representación binaria real de un Float
, necesita usar Storable
AFAIK.
- 1. Haskell Cómo convertir a Char Word8
- 2. ¿La mejor manera de convertir entre [Char] y [Word8]?
- 3. Convertir float a char *
- 4. Convertir float en bits
- 5. ¿Cómo puedo convertir un número entero en float en Java?
- 6. cómo puedo convertir un nsnumber en un float
- 7. Convertir float a NSNumber
- 8. Cómo convertir cadenas en float en JavaScript?
- 9. ¿Cómo puedo convertir un (StorableArray (Int, Int) Word8) en un byteString perezoso?
- 10. Cómo convertir float a int en smarty
- 11. Haskell ¿Cómo crear un Word8?
- 12. Convertir float a int en F #
- 13. convertir float a entero en prolog
- 14. ¿Cómo puedo replicar 'float: right' en XAML?
- 15. Convierte float [] en byte [] en float [] nuevamente
- 16. Cómo convertir float o currency a una cadena localizada?
- 17. ¿Cómo puedo convertir una cadena en int o float con prioridad en int?
- 18. Cómo convertir de float a bigDecimal en java?
- 19. Cómo convertir std :: wstring a tipo numérico (int, long, float)?
- 20. Cómo convertir Float (clase Wrapper) en clase contenedora Integer?
- 21. Cómo convertir el valor NSString @ "3.45" en float?
- 22. HTML, desbordamiento: desplazamiento y float
- 23. ¿Cómo se diferencia printf y co entre float y double?
- 24. Convertir float a decimal en SQL Server 2008
- 25. CSS float y el relleno
- 26. Diferencia entre #Define y Float?
- 27. Convirtiendo 'float' en 'byte [4]' y volviendo a 'float' en .NET Micro Framework
- 28. ¿Cómo puedo hacer un float top con CSS?
- 29. Float Arc4random?
- 30. Convertir de cadena de notación científica a float en C#
cereal-ieee754 pertenece ahora al cereal. –
Es bueno saberlo. Lamentablemente, las funciones de conversión ya no se exportan. –
Seguramente puede construir las conversiones usted mismo procesando el ByteString resultante? Sin embargo, habrá una pérdida de rendimiento ... – ehird