将[Int]转换为[Word8]

时间:2015-11-08 17:11:33

标签: haskell casting

如何将一个int列表[Int]转换为Word8列表[Word8]。我可以使用let a = 1 :: Word8强制转换一个int。如何为整数值列表执行相同操作?当我尝试时,我得到一个错误。

(除此之外,我的主要目标是从[Int] -> ByteString转换,我使用[Word8]作为中间人,有更好的方法吗?)

2 个答案:

答案 0 :(得分:9)

尝试fromIntegral,瑞士军队在整数类型之间转换的工具:Data.ByteString.pack (map fromIntegral [97..97 + 25])应该产生"abcdefghijklmnopqrstuvwxyz" :: Data.ByteString

关于这是否是最好的方法的问题:一旦你有Int的列表,除了支付转换费用之外你没有什么可做的。 Int是32位机器整数,其中三位保留用于标记(我认为),而Word8是8位机器整数。如果性能是一个问题,可能只在第一时间使用Word8

答案 1 :(得分:6)

要在不同的数字类型之间进行转换,请使用fromIntegral。在您的情况下,您需要map fromIntegral。请注意,如果从程序中无法推断fromIntegral的返回类型,则可能需要指定某些类型。

要生成ByteString,请尝试:Data.ByteString.pack . map fromIntegral