66 votes

Comment imprimer des littéraux entiers en binaire ou hex en haskell?

Comment imprimer des littéraux entiers en binaire ou hex en haskell?

 printBinary 5 => "0101"

printHex 5 => "05"
 

Quelles bibliothèques / fonctions permettent cela?

Je suis tombé sur le module Numeric et sa fonction showIntAtBase mais je n’ai pas pu l’utiliser correctement.

 > :t showIntAtBase 

showIntAtBase :: (Integral a) => a -> (Int -> Char) -> a -> String -> String
 

88voto

Chuck Points 138930

Le module Numérique comprend plusieurs fonctions permettant d'afficher un type Intégral sur différentes bases, notamment showIntAtBase . Voici quelques exemples d'utilisation:

 putStrLn $ showHex 12 "" -- prints "c"
putStrLn $ showIntAtBase 2 intToDigit 12 "" -- prints "1100"
 

37voto

Martin Lütke Points 130

Vous pouvez également utiliser printf du paquet printf pour formater votre sortie avec des descripteurs de format de style c:

 import Text.Printf

main = do

    let i = (65536-1 :: Int) 

    putStrLn $ printf "The value of %d in hex is: 0x%08x" i i
 

Sortie:

La valeur de 65535 en hex est: 0x0000ffff

29voto

Ian Ross Points 539

Si vous importez les modules Numeric et Data.Char , vous pouvez procéder comme suit:

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

Cela fonctionnera pour toutes les bases jusqu’à 16, car c’est tout ce pour quoi intToDigit travaille. L'argument de chaîne vide supplémentaire dans les exemples ci-dessus s'explique par le fait que showIntAtBase renvoie une fonction de type ShowS , qui concaténera la représentation d'affichage sur une chaîne existante.

8voto

SjB Points 6823

vous pouvez convertir un entier en binaire avec ce code ou comme ce code:

 decToBin x = reverse $ decToBin' x
where
decToBin' 0 = []
decToBin' y = let (a,b) = quotRem y 2 in [b] ++ decToBin' a
 

usage:

 decToBin 10 => [1,0,1,0]
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X