Tôi muốn chuyển đổi Float thành danh sách các byte [Word8] (và ngược lại). Tôi thấy có một lớp Storable mà có thể có thể được sử dụng cho điều này, nhưng tôi muốn tránh sử dụng IO monad vì điều này không có gì để làm với IO.Làm cách nào để chuyển đổi giữa Float và [Word8]?
Trả lời
Bạn muốn gì? Nếu bạn muốn chuyển đổi giữa Float và biểu diễn bit thực tế của nó, bạn có thể sử dụng data-binary-ieee754 (sử dụng Foreign.Storable
và unsafePerformIO
dưới mui xe) hoặc cereal-ieee754. Sau này không sử dụng Storable
hoặc IO
, nó ghi giá trị vào một số STUArray
, tạo mảng và đọc giá trị của loại khác. Cả hai gói đều cung cấp cho bạn chuyển đổi Float <-> Word32
(hoặc Double <-> Word64
), chuyển đổi WordN
thành [Word8]
thật dễ dàng.
Bạn không muốn Đáng yêu bạn muốn Nhị phân. Xem binary package.
Các trường hợp Nổi và Đôi sử dụng các hàm "encodeFloat" và "decodeFloat" mở đầu, vì đây là một cách độc lập thực hiện chuyển đổi giữa giá trị dấu phẩy động và cặp số nguyên. Hai số nguyên sau đó được chuyển đổi thành byte.
Tôi khuyên bạn nên sử dụng thư viện Data.Binary
.
Xem ở đây:
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]
Nếu bạn đang tự hỏi tại sao các đại diện là lớn, đó là vì việc thực hiện các Binary
dụ cho Float
và Double
sử dụng decodeFloat
chức năng:
decodeFloat :: RealFloat a => a -> (Integer, Int)
Điều này được thực hiện để giữ cho việc thực hiện như chung chung như Báo cáo Haskell (mà không chỉ định IEEE754 hoặc bất cứ điều gì như thế).
Để nhận được biểu diễn nhị phân thực tế của Float
, bạn cần sử dụng Storable
AFAIK.
- 1. Làm thế nào để chuyển đổi giữa ByteString và Vector đáng yêu?
- 2. Làm thế nào để chuyển đổi Char thành Float
- 3. Chuyển đổi hex sang float
- 4. Làm thế nào để chuyển đổi một mảng float thành một byte [] và ngược lại?
- 5. Làm cách nào để chuyển đổi số nguyên thành float trong Java?
- 6. Chuyển đổi float [] thành byte [] thành float [] lần nữa
- 7. Haskell Làm thế nào để tạo một Word8?
- 8. Làm thế nào để printf và đồng phân biệt giữa float và double
- 9. mssql chuyển đổi varchar thành float
- 10. Int để Float để Int chuyển đổi chính xác mất
- 11. Cách chuyển đổi mảng 4 byte thành float trong java
- 12. C#: Chuyển đổi ushort thành float
- 13. Làm cách nào để chuyển đổi giữa ký hiệu khoa học và thập phân trong Perl?
- 14. Làm cách nào để chuyển đổi giữa ISO-8859-1 và UTF-8 trong Java?
- 15. Làm cách nào để chuyển đổi giữa tiêu đề và triển khai trong VS2010?
- 16. Làm cách nào để chuyển đổi giữa GPS và Nhà cung cấp mạng?
- 17. Làm cách nào để chuyển đổi mã giữa OmniXML và thư viện XML của Delphi?
- 18. Làm cách nào để chuyển đổi giữa đường ray 3.2.13 và đường ray 4.0.0?
- 19. Làm cách nào để chuyển đổi các chuỗi giữa chữ hoa và chữ thường trong Java?
- 20. Làm cách nào để chuyển đổi giữa các dòng mới của Windows và UNIX trong Netbeans?
- 21. Làm thế nào để chuyển đổi Float (Wrapper class) thành lớp wrapper Integer?
- 22. Làm thế nào để chuyển đổi chuỗi số (float) trong Perl
- 23. Làm thế nào để chuyển đổi chuỗi thành float trong JavaScript?
- 24. Java chuyển đổi float thành số nguyên
- 25. Làm thế nào để chuyển đổi một chuỗi nhị phân thành một giá trị float?
- 26. Làm thế nào tôi có thể chuyển đổi một (StorableArray (Int, Int) Word8) thành một ByteString lười biếng?
- 27. Làm thế nào để chuyển đổi từ float sang bigDecimal trong java?
- 28. Làm thế nào để chuyển đổi giá trị float thành số nguyên trong php?
- 29. Làm thế nào để chuyển đổi chuỗi thành giá trị float trong android
- 30. Làm thế nào để chuyển đổi một số nguyên sang float trong Delphi?
cereal-ieee754 thuộc về ngũ cốc. –
Điều cần biết. Thật không may, các chức năng chuyển đổi không còn được xuất nữa. –
Chắc chắn bạn có thể tự mình xây dựng các chuyển đổi bằng cách xử lý ByteString kết quả? Sẽ có một sự mất mát hiệu suất, mặc dù ... – ehird