Haskell:递归地将十六进制字符串转换为整数?

标签 haskell recursion hex type-conversion

对于我的家庭作业,我需要使用递归函数(使用尽可能多的辅助方法)将十六进制字符串转换为以 10 为基数的整数。

这是我到目前为止所得到的:

-- Question 1, part (c):
hexChar :: Char -> Integer
hexChar ch
    | ch == '0' = 0
    | ch == '1' = 1
    | ch == '2' = 2
    | ch == '3' = 3
    | ch == '4' = 4
    | ch == '5' = 5
    | ch == '6' = 6
    | ch == '7' = 7
    | ch == '8' = 8
    | ch == '9' = 9
    | ch == 'A' = 10
    | ch == 'B' = 11
    | ch == 'C' = 12
    | ch == 'D' = 13
    | ch == 'E' = 14
    | ch == 'F' = 15
    | otherwise     = 0

parseHex :: String -> Integer
parseHex hxStr 
    | length hxStr /= 0 = (hexChar(last(hxStr)))+(10*parseHex(init(hxStr)))
    | otherwise         = 0  

但是,这不会产生正确的结果。 有谁知道正确的方法吗?

最佳答案

你们真的很亲近。您的错误在这一行:

    | length hxStr /= 0 = (hexChar(last(hxStr)))+(10*parseHex(init(hxStr)))

想想为什么要乘以 10。记住...十六进制是以 16 为底的。

关于Haskell:递归地将十六进制字符串转换为整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14929437/

相关文章:

c - 如何将已声明的 char 字符串(即 Unicode 字符)读取为十六进制 2 位值?

haskell - 关于函数 monad

javascript - 如何从递归请求返回 promise 并在数据匹配条件时解决它?

java - 返回数字,但打印为 0

c# - 将文件中的十六进制添加到 List<byte>

c# - 逆向工程串行命令

haskell - 有没有一种简单的方法可以将派生 Enum 的数据类型转换为列表?

haskell - 如何编写一个可以序列化/反序列化来自类似 map 结构的任何记录的通用函数?

haskell - 在 Haskell 中管理事件

algorithm - 确定树遍历是广度优先、深度优先还是两者都不是