【问题标题】:Haskell: Library function to convert hexadecimal to binary notationHaskell:将十六进制转换为二进制表示法的库函数
【发布时间】:2018-06-22 09:27:03
【问题描述】:

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

我查看了 Data.Hex、Data.HexString、Numeric 和其他几个应该相关的库,并且我认为我能够找到我正在寻找的函数。但是,我对 Haskell 很陌生,可能会忽略一些简单的事情。

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

【问题讨论】:

    标签: haskell hex libraries


    【解决方案1】:

    没有一个库函数可以将十六进制数字转换为二进制字符串。您可以使用模块 Numeric 中的 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 是否有特定原因?
    • @Basillicum 并非所有Char 值都是有效的十六进制数字。注意hexToBin 'g' == Nothing.
    【解决方案2】:

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

    Haskell: recursively convert hex string to integer?

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

    【讨论】:

      猜你喜欢
      • 2013-11-07
      • 2023-04-03
      • 2018-02-17
      • 2012-06-26
      • 2016-08-28
      • 2013-07-25
      相关资源
      最近更新 更多