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

标签 haskell

有没有一种有效的方法可以将Int(最好是Integer)转换为Word8列表甚至位列表? {G,H}搜索 Int -> [Word8] 没有产生任何有希望的结果…

最佳答案

IntInteger 都是 Bits 的实例typeclass,因此您可以使用该类的函数随意提取单个位。

因为 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]

这给出了例子

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/

相关文章:

Haskell - 类型包装器统一

haskell - 第一次使用 monad 的经验 (Haskell)

haskell - 如何在 Haskell 中使用 let 声明函数(仅限单行操作)

memory - 如何在 Haskell 中获取指针值?

haskell - 为什么 Haskell 不接受我的组合 "zip"定义?

haskell - 从外部网络采样行为

haskell - 从 GHC 8.10 升级到 9.2 - "Instance head cannot contain nested ‘forall’ s 或上下文”

haskell初学者字符串

Haskell 风格的类型族

haskell - 在 Haskell 中生成随机数