将Int或Integer转换为[Word8]或[Bit]

bet*_*eta 2 haskell

有没有一种有效的方法将Int(并且最好Integer)转换为列表Word8或甚至列表?{G,H} oogling for Int -> [Word8]没有产生任何有希望的结果......

gsp*_*spr 6

这两个IntInteger是的实例Bits类型类,这样你就可以提取使用这个类的功能,随意的单位.

既然Int也是一个实例Storable,你可以使用它的大小sizeOf.安(低效)实现你想要什么Int,以及其他类型都是实例BitsStorable,是这样的:

import Foreign.Storable
import Data.Bits

bitList :: (Storable a, Bits a) => a -> [Bool]
bitList x = map (testBit x) [0..8*(sizeOf x)-1]
Run Code Online (Sandbox Code Playgroud)

这给出了例如

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]
Run Code Online (Sandbox Code Playgroud)