如何将一个int列表[Int]
转换为Word8列表[Word8]
。我可以使用let a = 1 :: Word8
强制转换一个int。如何为整数值列表执行相同操作?当我尝试时,我得到一个错误。
(除此之外,我的主要目标是从[Int] -> ByteString
转换,我使用[Word8]
作为中间人,有更好的方法吗?)
答案 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
。