Haskell 程序:将十进制转换为十六进制
在 Haskell 中,我们可以使用 intToDigits、showIntAtBase 和 format 函数将十进制数转换为十六进制数。在第一个示例中,我们将使用 (decToHex n = reverse (hexChars n) where hexChars 0 = "" and hexChars x = intToDigit (x `mod` 16) : hexChars (x `div` 16)),在第二个示例中,我们将使用 (decToHex n = showIntAtBase 16 intToDigit n "") 函数。在第三个示例中,我们将使用 (decToHex n = printf "%X" n) 函数。
方法 1:使用 reverse 和 intToDigits 函数
在此方法中,导入 Data.Char 模块以使用 intToDigit 函数,该函数将整数转换为其对应的十六进制字符。
decToHex 函数递归地将输入整数转换为十六进制,方法是重复取输入整数除以 16 的余数和商,并将相应的十六进制字符附加到列表中。然后反转生成的列表以获得十六进制字符的正确顺序。
算法
步骤 1 - 导入 Data.Char 库。
步骤 2 - 使用 reverse 和 intToDigit 函数定义 decToHex 函数,如下所示:
decToHex 0 = "0"
decToHex n = reverse (hexChars n)
where
hexChars 0 = ""
hexChars x = intToDigit (x `mod` 16) : hexChars (x `div` 16).
步骤 3 - 程序执行将从 main 函数开始。main() 函数控制整个程序。它被写成 main = do。
步骤 4 - 初始化名为“n”的变量。它将保存要转换为相应十六进制数的十进制数。
步骤 5 - 在调用函数后,使用 ‘putStrLn’ 语句将结果十六进制数打印到控制台。
示例
在此示例中,使用 intToDigit 和 reverse 函数定义递归函数以将十进制数转换为十六进制数。
import Data.Char (intToDigit)
decToHex :: Int -> String
decToHex 0 = "0"
decToHex n = reverse (hexChars n)
where
hexChars 0 = ""
hexChars x = intToDigit (x `mod` 16) : hexChars (x `div` 16)
main :: IO ()
main = do
let n = 52
putStrLn $ "The hexadecimal representation of " ++ show n ++ " is " ++ decToHex n
输出
The hexadecimal representation of 52 is 34
方法 2:使用 showIntAtBase 函数
在此方法中,分别导入 Numeric 和 Data.Char 模块以使用 showIntAtBase 和 intToDigit 函数。decToHex 函数使用基数为 16 和 intToDigit 作为转换函数调用 showIntAtBase,以获取输入整数的十六进制字符串表示形式。
算法
步骤 1 - 导入 Data.Char 和 Numeric 库。
步骤 2 - 使用 showIntAtBase 函数定义 decToHex 函数,如下所示:
decToHex n = showIntAtBase 16 intToDigit n "".
步骤 3 - 程序执行将从 main 函数开始。main() 函数控制整个程序。它被写成 main = do。
步骤 4 - 初始化名为“n”的变量。它将保存要转换为相应十六进制数的十进制数。
步骤 5 - 在调用函数后,使用 ‘putStrLn’ 语句将结果十六进制数打印到控制台。
示例
在此示例中,使用 intToDigit 和 showIntAtBase 函数定义函数以将十进制数转换为十六进制数。
import Numeric (showIntAtBase) import Data.Char (intToDigit) decToHex :: Int -> String decToHex n = showIntAtBase 16 intToDigit n "" main :: IO () main = do let n = 52 putStrLn $ "The hexadecimal representation of " ++ show n ++ " is " ++ decToHex n
输出
The hexadecimal representation of 52 is 34
方法 3:使用 format 函数
在此方法中,导入 Text.Printf 模块以使用 printf 函数,该函数可以使用 %X 格式说明符将整数格式化为十六进制字符串。decToHex 函数只需使用 %X 格式说明符和输入整数调用 printf 即可获取十六进制字符串表示形式。
算法
步骤 1 - 导入 Text.Printf 库。
步骤 2 - 使用 format 函数定义 decToHex 函数,如下所示:
decToHex n = printf "%X" n.
步骤 3 - 程序执行将从 main 函数开始。main() 函数控制整个程序。它被写成 main = do。
步骤 4 - 初始化名为“n”的变量。它将保存要转换为相应十六进制数的十进制数。
步骤 5 - 在调用函数后,使用 ‘putStrLn’ 语句将结果十六进制数打印到控制台。
示例
在此示例中,使用 format 函数定义函数以将十进制数转换为十六进制数。
import Text.Printf (printf) decToHex :: Int -> String decToHex n = printf "%X" n main :: IO () main = do let n = 52 putStrLn $ "The hexadecimal representation of " ++ show n ++ " is " ++ decToHex n
输出
The hexadecimal representation of 52 is 34
结论
在 Haskell 中,使用 reverse、showIntAtBase 和 format 函数将十进制数转换为十六进制数。要将十进制数转换为十六进制数,我们重复将十进制数除以 16,并将每次除法的余数用作十六进制数字。我们继续进行除法,直到商为零。十六进制数字按相反的顺序排列以获得最终的十六进制表示形式。
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP