我在这里有一个短的haskell函数,它应该将“ABCDEF”转换为0x41,0x42,0x43,0x44,0x45,0x46(它们的ascii值),然后将它们相乘,使它变为0x4142,4344,4546,但它似乎是限制整数长度 - 我认为haskell使用任意的bignums?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
参见http://stackoverflow.com/questions/3429291/haskell-int-and-integer – 2011-04-22 17:30:33
类型是你的朋友。添加类型签名,并且清楚发生了什么事情! – 2017-04-06 11:34:15