Haskell:将十六进制转换为二进制的库函数

时间:2018-01-12 21:39:02

标签: haskell hex libraries

是否有库函数将十六进制数字(0-F)转换为等效的四位二进制值?例如,9 = 1001,C = 1100.

我看过Data.Hex,Data.HexString,Numeric和其他几个应该相关的库,我原以为我能够找到我想要的函数。但是,我对Haskell很新,可能会忽略一些简单的事情。

编辑:不是重复,IMO。我的问题是直接从十六进制转换为二进制,链接的问题(及其答案)没有提及。

2 个答案:

答案 0 :(得分:4)

没有一个库函数可以将十六进制数字转换为二进制数字。您可以使用模块readHex中的Numeric将十六进制数字转换为整数,并从printf模块将Text.Printf转换为生成二进制字符串,如下所示:

import Numeric (readHex)
import Text.Printf (printf)

hexToBin :: Char -> Maybe String
hexToBin c
  = case readHex [c] of
      (x,_):_ -> Just $ printf "%04b" (x::Int)
      _       -> Nothing

,并提供:

> map hexToBin (['0'..'9'] ++ ['A'..'G'])
[Just "0000",Just "0001",Just "0010",Just "0011",Just "0100",
Just "0101",Just "0110",Just "0111",Just "1000",Just "1001",
Just "1010",Just "1011",Just "1100",Just "1101",Just "1110",
Just "1111",Nothing]

答案 1 :(得分:2)

不确定您是否可以使用此功能:How to print integer literals in binary or hex in haskell?

Haskell: recursively convert hex string to integer?

我不认为有一个库函数,但您可以使用类似的模型将其转换为base 2。