Как распечатать целочисленные литералы в двоичном файле или шестнадцатеричное число в haskell?

Как распечатать целочисленные литералы в двоичном файле или шестнадцатеричное число в haskell?

printBinary 5 => "0101"

printHex 5 => "05"

Какие библиотеки/функции позволяют это?

Я столкнулся с Числовым модулем и его функцией showIntAtBase, но был неспособен использовать его правильно.

> :t showIntAtBase 

showIntAtBase :: (Integral a) => a -> (Int -> Char) -> a -> String -> String
62
задан TheOne 24 December 2009 в 20:41
поделиться

3 ответа

Числовой модуль включает несколько функций для отображения интегрального типа на различных основаниях, включая showIntAtBase . Вот несколько примеров использования:

import Numeric (showHex, showIntAtBase)
import Data.Char (intToDigit)

putStrLn $ showHex 12 "" -- prints "c"
putStrLn $ showIntAtBase 2 intToDigit 12 "" -- prints "1100"
82
ответ дан 24 November 2019 в 16:37
поделиться

Если вы импортируете модули Numeric и Data.Char , вы можете сделать это:

showIntAtBase 2 intToDigit 10 "" => "1010"
showIntAtBase 16 intToDigit 1023 "" => "3ff"

Это будет работать для любых баз до 16, так как это все, для чего работает intToDigit . Причина для аргумента дополнительной пустой строки в приведенных выше примерах заключается в том, что showIntAtBase возвращает функцию типа ShowS , которая объединяет отображаемое представление с существующей строкой.

28
ответ дан 24 November 2019 в 16:37
поделиться

Вы можете преобразовать целое число в двоичное, используя что-то вроде следующего:

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]
6
ответ дан 24 November 2019 в 16:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: