You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Haskell:是否有库函数将十六进制数字转四位二进制?

单个十六进制字符转四位二进制的Haskell实现方案

嘿,作为Haskell新手,你找的这个需求确实没有特别直接的标准库函数,但其实有几个简单的实现方式,完全能满足你的要求:

1. 预定义映射表(最直观,适合新手)

因为十六进制数字只有16种可能,直接写一个映射表是最易懂且高效的方式:

import Data.Char (toUpper)

hexCharTo4BitBin :: Char -> String
hexCharTo4BitBin c = case toUpper c of
  '0' -> "0000"; '1' -> "0001"; '2' -> "0010"; '3' -> "0011"
  '4' -> "0100"; '5' -> "0101"; '6' -> "0110"; '7' -> "0111"
  '8' -> "1000"; '9' -> "1001"; 'A' -> "1010"; 'B' -> "1011"
  'C' -> "1100"; 'D' -> "1101"; 'E' -> "1110"; 'F' -> "1111"
  _ -> error "Invalid single hex digit"

使用的时候直接调用hexCharTo4BitBin '9'就会返回"1001",hexCharTo4BitBin 'c'返回"1100",完全符合你的预期。

2. 用标准库函数动态转换(更通用)

如果你想利用标准库的工具来实现,可以结合Numeric模块的showIntAtBase函数,再加上补前导零的逻辑:

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

hexCharTo4BitBin :: Char -> String
hexCharTo4BitBin c = padTo4 $ showIntAtBase 2 intToDigit hexInt ""
  where
    hexInt = case toUpper c of
      '0' -> 0; '1' -> 1; '2' -> 2; '3' -> 3
      '4' -> 4; '5' -> 5; '6' -> 6; '7' -> 7
      '8' -> 8; '9' -> 9; 'A' -> 10; 'B' -> 11
      'C' -> 12; 'D' -> 13; 'E' -> 14; 'F' -> 15
      _ -> error "Invalid single hex digit"
    padTo4 s = replicate (4 - length s) '0' ++ s

这个方法先把十六进制字符转成对应的整数,再用showIntAtBase转成二进制字符串,最后补零到四位长度,逻辑更通用,适合需要扩展的场景。

补充说明

你之前查阅的Data.Hex、Data.HexString这类库,主要是处理整段十六进制字符串和二进制字节流之间的转换,而不是针对单个字符的四位二进制字符串转换,所以没找到直接对应的函数很正常。上面两种方法都很轻量,不需要额外安装第三方库,用标准库就能搞定。

内容的提问来源于stack exchange,提问作者SindreKjr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:10:49