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

5
有没有一个库函数可以将十六进制数字(0-F)转换为其等效的四位二进制值?例如,9 = 1001,C = 1100。
我查看了Data.Hex、Data.HexString、Numeric和其他几个相关的库,并且我认为我应该能够找到我正在寻找的函数。然而,我对Haskell非常陌生,可能会忽略一些简单的东西。
编辑:不是重复,我的问题是关于直接从十六进制到二进制的转换,而链接的问题(及其答案)没有提到。
2个回答

5

没有一个单独的库函数可以将十六进制数字转换为二进制字符串。您可以使用模块中的readHex将十六进制数字转换为整数,然后使用Text.Printf模块中的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]

非常有帮助,谢谢。使用Maybe和Just有特殊原因吗? - SindreKjr
@Basillicum 并非所有的 Char 值都是有效的十六进制数字。请注意,hexToBin 'g' == Nothing - chepner

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接