有没有一种有效的方法可以将Int
(最好是Integer
)转换为Word8
列表甚至位列表? {G,H}搜索 Int -> [Word8]
没有产生任何有希望的结果…
最佳答案
Int
和 Integer
都是 Bits
的实例typeclass,因此您可以使用该类的函数随意提取单个位。
因为 Int
也是 Storable
的实例,您可以使用 sizeOf
获取其大小。您想要的 Int
以及作为 Bits
和 Storable
实例的其他类型的(低效)实现如下:
import Foreign.Storable
import Data.Bits
bitList :: (Storable a, Bits a) => a -> [Bool]
bitList x = map (testBit x) [0..8*(sizeOf x)-1]
这给出了例子
bitList (0 :: Int) == [False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False]
bitList (-1 :: Int) == [True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True]
bitList (16 :: Word8) == [False,False,False,False,True,False,False,False]
bitList (maxBound ::Word32) == [True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True]
关于haskell - 将 Int 或 Integer 转换为 [Word8] 或 [Bit],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31208316/