Haskell函数似乎限制了整数长度 - 我认为它使用了bignums?

时间:2010-07-16 02:40:30

标签: haskell integer int bignum

我这里有一个短的haskell函数,它应该将“ABCDEF”转换为0x41,0x42,0x43,0x44,0x45,0x46(它们的ascii值),然后将它们相乘,使它变为0x4142,4344,4546但是它似乎是限制整数长度 - 我认为haskell使用任意bignums?

代码的最后一行工作正常,这让我很困惑

有什么想法吗?非常感谢

import Data.Char
import Numeric

strToHex2 (h:[]) = ord h
strToHex2 (h:t) = (ord h) + ((strToHex2 t) * 256)
strToHex s = strToHex2 (reverse s)

main = do
  print(strToHex "ABCDEF")
  print ((((((((0x41*256+0x42)*256)+0x43)*256)+0x44)*256)+0x45)*256+0x46)

输出结果为:

1128547654      <- limited to 32 bits for some reason?
71752852194630  <- that's fine

1 个答案:

答案 0 :(得分:10)

您的问题是ord返回Int,其中 固定宽度。你想要toInteger $ ord h