Как распечатать целочисленные литералы в двоичном файле или шестнадцатеричное число в haskell?
printBinary 5 => "0101"
printHex 5 => "05"
Какие библиотеки/функции позволяют это?
Я столкнулся с Числовым модулем и его функцией showIntAtBase, но был неспособен использовать его правильно.
> :t showIntAtBase
showIntAtBase :: (Integral a) => a -> (Int -> Char) -> a -> String -> String
Числовой модуль включает несколько функций для отображения интегрального типа на различных основаниях, включая showIntAtBase
. Вот несколько примеров использования:
import Numeric (showHex, showIntAtBase)
import Data.Char (intToDigit)
putStrLn $ showHex 12 "" -- prints "c"
putStrLn $ showIntAtBase 2 intToDigit 12 "" -- prints "1100"
Если вы импортируете модули Numeric
и Data.Char
, вы можете сделать это:
showIntAtBase 2 intToDigit 10 "" => "1010"
showIntAtBase 16 intToDigit 1023 "" => "3ff"
Это будет работать для любых баз до 16, так как это все, для чего работает intToDigit
. Причина для аргумента дополнительной пустой строки в приведенных выше примерах заключается в том, что showIntAtBase
возвращает функцию типа ShowS
, которая объединяет отображаемое представление с существующей строкой.
Вы можете преобразовать целое число в двоичное, используя что-то вроде следующего:
decToBin x = reverse $ decToBin' x
where
decToBin' 0 = []
decToBin' y = let (a,b) = quotRem y 2 in [b] ++ decToBin' a
использование в GHCi:
Prelude> decToBin 10
[1,0,1,0]