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
相关产品推荐
相关产品推荐

