у меня есть короткая функция haskell здесь, которая, как предполагается, преобразовывает "ABCDEF" в 0x41,0x42,0x43,0x44,0x45,0x46 (их значения ASCII), затем умножает их так, это становится 0x4142,4344,4546, но это, кажется, ограничивает целочисленную длину - я думал, что haskell использовал произвольные сверхбольшие числа?
Последняя строка кода хорошо работает, который озадачивает меня
Какие-либо идеи?Большое спасибо
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
Ваша проблема в том, что ord
возвращает Int
, который является фиксированной ширины. Вы хотите toInteger $ ord h
.