5

ここに、「ABCDEF」を0x41,0x42,0x43,0x44,0x45,0x46(ASCII値)に変換し、それらを乗算して0x4142,4344,4546になるはずの短いhaskell関数がありますが、整数の長さを制限している-haskellは任意のbignumを使用していると思いましたか?

コードの最後の行は正常に機能し、私を困惑させます

何か案は?どうもありがとう

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
4

1 に答える 1

10

あなたの問題は、固定幅であるord返すことです。あなたが欲しい。InttoInteger $ ord h

于 2010-07-16T02:47:04.460 に答える