Converting number base

后端 未结 3 910
日久生厌
日久生厌 2021-02-08 14:29

Is there a platform function that will do the following?

convertBase :: (Num a, Num b) => Int -> Int -> [a] -> [b]

Convert a number

相关标签:
3条回答
  • 2021-02-08 14:54

    Using the digits package from Hackage:

    import Data.Digits (digits, unDigits)
    
    convertBase :: Integral a => a -> a -> [a] -> [a]
    convertBase from to = digits to . unDigits from
    

    You can add a fromIntegral in there if you need the input and output types to be different. Also, the Integral constraint makes more sense than Num, since you probably don't want to deal with complex or floating-point digits.

    0 讨论(0)
  • 2021-02-08 15:06

    Couple of ideas:

    • use showIntAtBase or Text.printf to convert to a string, and convert back to a different base
    • write it yourself -- easier when one base is always a multiple of the other

    Here is a link that might help you: http://rosettacode.org/wiki/Non-decimal_radices/Convert#Haskell -- Non-decimal radices/Convert

    0 讨论(0)
  • 2021-02-08 15:09

    The closest thing in the haskell platform is from module Numeric:

    readInt :: Num a => a -> (Char -> Bool) -> (Char -> Int) -> ReadS a
    showIntAtBase :: Integral a => a -> (Int -> Char) -> a -> ShowS

    fromBase :: Int -> String -> Int
    fromBase base = fst . head . readInt base ((<base).digitToInt) digitToInt
    
    toBase :: Int -> Int -> String
    toBase base num = showIntAtBase base intToDigit num ""
    
    fromBaseToBase :: Int -> Int -> String -> String
    fromBaseToBase from to = toBase to . fromBase from
    
    0 讨论(0)
提交回复
热议问题