Haskell程序:将十六进制转换为十进制
本教程将帮助我们创建一个Haskell程序,使用reverse、map和foldl函数将给定的十六进制数转换为十进制数。
十六进制到十进制的转换是将一个数从十六进制数制转换为十进制数制的过程。
十六进制数制使用16为基数,这意味着该系统中使用16个独特的符号来表示数字(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F)。另一方面,十进制数制使用10为基数,使用0到9的符号来表示数字。
算法
步骤1 − 使用内部函数定义hexToDecimal函数。
步骤2 − 程序执行将从main函数开始。main()函数控制整个程序。它被写成main = do。在main函数中,hexToDecimal函数被调用并带参数,结果被打印到控制台。
步骤3 − 命名为“hexStr”的变量被初始化。它将保存要转换为相应十进制数的十六进制数。
步骤4 − 函数调用后,使用‘putStrLn’语句将结果的十进制数打印到控制台。
示例1
在这个例子中,hexToDecimal函数首先使用map toUpper将十六进制字符串的每个字符转换为大写,然后使用map digitToInt将每个字符转换为其等效的十进制值,最后通过将十进制值及其对应的乘数的乘积相加来计算十进制表示。乘数使用iterate (*16) 1计算,它生成一个从1开始的16的幂的无限列表。zipWith (*)函数用于将每个十进制值与其对应的乘数相乘。
import Data.Char (digitToInt, toUpper) hexToDecimal :: String -> Int hexToDecimal = sum . zipWith (*) (iterate (*16) 1) . reverse . map digitToInt . map toUpper main :: IO () main = do let hexStr = "34" putStrLn $ "The equivalent decimal representation is: " ++ show (hexToDecimal hexStr)
输出
The equivalent decimal representation is: 52
示例2
在这种方法中,hexToDecimal函数首先使用map toUpper将十六进制字符串的每个字符转换为大写,然后使用hexDigitToInt辅助函数计算十进制表示,该函数将每个十六进制数字映射到其等效的十进制值。然后使用foldl函数从左到右遍历十进制值的列表,对于每个值,它通过将当前值乘以16并加上当前十六进制数字的十进制等效值来计算更新的十进制表示。
import Data.Char (digitToInt, toUpper,ord)
hexToDecimal :: String -> Int
hexToDecimal = foldl (\acc x -> acc * 16 + hexDigitToInt x) 0 . map toUpper
where hexDigitToInt x
| x >= '0' && x <= '9' = ord x - ord '0'
| x >= 'A' && x <= 'F' = ord x - ord 'A' + 10
main :: IO ()
main = do
let hexStr = "34"
putStrLn $ "The equivalent decimal representation is: " ++ show (hexToDecimal hexStr)
输出
The equivalent decimal representation is: 52
结论
在Haskell中,十六进制数转换为十进制数是使用reverse、map和foldl函数实现的。从十六进制转换为十进制时,每个十六进制数字都乘以16的幂,这取决于它在数字中的位置。十六进制数的十进制表示是通过将每个数字的十进制值相加得到的。
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP