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,並將每次除法的餘數用作十六進位制數字。我們繼續進行除法,直到商為零。十六進位制數字按相反的順序排列以獲得最終的十六進位制表示形式。

更新於: 2023年3月13日

481 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告