我想將Float轉換爲字節列表[Word8](反之亦然)。我看到有一個Storable類可能可以用於此,但我想避免使用IO monad,因爲這與IO無關。如何在Float和[Word8]之間進行轉換?
7
A
回答
6
你想要什麼?如果要在浮點數和其實際位表示之間進行轉換,可以使用data-binary-ieee754(使用Foreign.Storable
和unsafePerformIO
)或cereal-ieee754。後者不使用Storable
或IO
,它將值寫入STUArray
,轉換數組並讀取其他類型的值。這兩個軟件包都給你一個轉換Float <-> Word32
(或Double <-> Word64
),轉換WordN
爲[Word8]
很容易。
1
你不想要存儲你想要的二進制文件。請參閱binary package。
Float和Double實例使用前綴「encodeFloat」和「decodeFloat」函數,因爲這些是在浮點值和整數對之間進行轉換的獨立於實現的方式。這兩個整數然後轉換爲字節。
5
我推薦Data.Binary
庫。
在這裏看到:
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]
如果你想知道爲什麼表現是那麼大,這是因爲Binary
實例的實施Float
和Double
的使用decodeFloat
功能:
decodeFloat :: RealFloat a => a -> (Integer, Int)
這樣做是爲了保持實現像Haskell報告一樣通用(沒有指定IEEE754或類似的東西)。
要獲得Float
的實際二進制表示,您需要使用Storable
AFAIK。
相關問題
- 1. 在System.Data.SqlDbType和Microsoft.SqlServer.Management.Smo.SqlDataType之間進行轉換
- 2. 如何在vector_float2和CGPoint *之間進行轉換?
- 3. OpenCV如何在16位和8位之間進行imread轉換
- 4. signed,unsigned和float類型之間的轉換如何工作?
- 5. 如何在R中的十進制和十六進制之間進行轉換?
- 6. 如何使用boost :: date_time在本地和世界時間之間進行轉換?
- 7. Hadoop和jgit在java.io.file和dataoutputstream之間進行轉換
- 8. 如何在頁面之間進行轉換
- 9. 如何在多個XML文件之間進行動畫轉換?
- 10. 如何在SKScene中的幾個ViewController之間進行轉換?
- 11. 如何在隱式可轉換類型之間進行接口?
- 12. 如何在數字類型之間進行轉換?
- 13. 如何在列表項目之間進行自動轉換?
- 14. 如何使用opencv-cv :: Scalar在QT-QColor之間進行轉換?
- 15. 如何使用win32 API在時區之間進行轉換?
- 16. 如何在Linux上使用swift在CFString和String之間進行轉換
- 17. 是否可以在Socket和TcpClient對象之間進行轉換?
- 18. 在C枚舉和XML之間進行轉換
- 19. 在WikidPad,reStructuredText和HTML之間進行轉換
- 20. 是否有可能在akka.http.javadsl.server.Route和akka.http.scaladsl.server.Route之間進行轉換
- 21. Haskell:在ByteString和不同文本編碼之間進行轉換
- 22. Bootstrap datepicker - 在內部值和顯示值之間進行轉換
- 23. 在RGB和一個整數/浮點值之間進行轉換
- 24. 在Latin1編碼的Data.ByteString和Data.Text之間進行轉換
- 25. 如何在表情符號鍵盤和軟鍵盤之間進行轉換
- 26. 如何在數字和代表它們的單詞之間進行轉換?
- 27. 如何在Java中的Object []和接口(IProject [])之間進行轉換?
- 28. 如何在Oracle「修復版本」和Oracle JDK版本之間進行轉換?
- 29. 如何在相似性度量和差異度量之間進行轉換?
- 30. 如何轉換 - > Float?
穀物ieee754現在屬於穀物。 – 2011-12-22 13:21:33
很高興知道。不幸的是,轉換函數不再被導出。 – 2011-12-22 14:40:42
當然,您可以通過處理生成的ByteString來自己構建轉換?會有一個性能損失,雖然... – ehird 2011-12-22 14:58:46