2010-07-16 4 views
5

여기에 "ABCDEF"를 0x41,0x42,0x43,0x44,0x45,0x46 (ASCII 값)으로 변환하고 0x4142,4344,4546이되도록 곱하면되는 짧은 haskell 함수가 있습니다.하지만 정수 길이를 제한하는 것 같다 - 나는 haskell이 임의의 bignum을 사용했다고 생각 하나?하스켈 함수가 정수 길이를 제한하는 것으로 보인다 - 나는 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

또한보십시오 http://stackoverflow.com/questions/3429291/haskell-int-and-integer –

+0

유형은 당신의 친구입니다. 유형 서명을 추가하면 진행중인 작업이 명확합니다! –

답변

10

귀하의 문제가 ordInt을 반환하고, 어떤 고정 폭이다. toInteger $ ord h을 원합니다.

+1

그래서 정수와 정수의 차이점은 무엇입니까? – Chris

+2

@Chris 예, http://www.haskell.org/tutorial/numbers.html을 참조하십시오. – chollida