如何在Progress 4GL中开发十六进制与二进制互转计算器
用Progress 4GL实现十六进制与二进制双向转换
完全可以实现这个功能,以下是核心的转换函数实现,包含输入验证和双向转换逻辑:
十六进制转二进制函数
FUNCTION hexToBin RETURNS CHARACTER (inputHex AS CHARACTER): DEF VAR binStr AS CHARACTER NO-UNDO. DEF VAR i AS INTEGER NO-UNDO. DEF VAR hexChar AS CHARACTER NO-UNDO. inputHex = UPPER(inputHex). DO i = 1 TO LENGTH(inputHex): hexChar = SUBSTRING(inputHex, i, 1). CASE hexChar: WHEN "0" THEN binStr = binStr + "0000". WHEN "1" THEN binStr = binStr + "0001". WHEN "2" THEN binStr = binStr + "0010". WHEN "3" THEN binStr = binStr + "0011". WHEN "4" THEN binStr = binStr + "0100". WHEN "5" THEN binStr = binStr + "0101". WHEN "6" THEN binStr = binStr + "0110". WHEN "7" THEN binStr = binStr + "0111". WHEN "8" THEN binStr = binStr + "1000". WHEN "9" THEN binStr = binStr + "1001". WHEN "A" THEN binStr = binStr + "1010". WHEN "B" THEN binStr = binStr + "1011". WHEN "C" THEN binStr = binStr + "1100". WHEN "D" THEN binStr = binStr + "1101". WHEN "E" THEN binStr = binStr + "1110". WHEN "F" THEN binStr = binStr + "1111". OTHERWISE RETURN "Invalid hex character: " + hexChar. END CASE. END. RETURN binStr. END FUNCTION.
这个函数会将输入的十六进制字符串转为大写后逐个字符处理,每个十六进制字符对应4位二进制位,遇到非法字符会返回错误提示。
二进制转十六进制函数
FUNCTION binToHex RETURNS CHARACTER (inputBin AS CHARACTER): DEF VAR hexStr AS CHARACTER NO-UNDO. DEF VAR i AS INTEGER NO-UNDO. DEF VAR binChunk AS CHARACTER NO-UNDO. DEF VAR padLen AS INTEGER NO-UNDO. -- 验证输入是否仅包含0和1 IF NOT INPUTBIN MATCHES "*[01]*" OR INPUTBIN MATCHES "*[^01]*" THEN RETURN "Invalid binary string: only 0s and 1s allowed.". -- 补前导0,让二进制长度是4的倍数 padLen = 4 - (LENGTH(inputBin) MOD 4). IF padLen <> 4 THEN inputBin = REPEAT("0", padLen) + inputBin. DO i = 1 TO LENGTH(inputBin) BY 4: binChunk = SUBSTRING(inputBin, i, 4). CASE binChunk: WHEN "0000" THEN hexStr = hexStr + "0". WHEN "0001" THEN hexStr = hexStr + "1". WHEN "0010" THEN hexStr = hexStr + "2". WHEN "0011" THEN hexStr = hexStr + "3". WHEN "0100" THEN hexStr = hexStr + "4". WHEN "0101" THEN hexStr = hexStr + "5". WHEN "0110" THEN hexStr = hexStr + "6". WHEN "0111" THEN hexStr = hexStr + "7". WHEN "1000" THEN hexStr = hexStr + "8". WHEN "1001" THEN hexStr = hexStr + "9". WHEN "1010" THEN hexStr = hexStr + "A". WHEN "1011" THEN hexStr = hexStr + "B". WHEN "1100" THEN hexStr = hexStr + "C". WHEN "1101" THEN hexStr = hexStr + "D". WHEN "1110" THEN hexStr = hexStr + "E". WHEN "1111" THEN hexStr = hexStr + "F". END CASE. END. RETURN hexStr. END FUNCTION.
该函数先验证输入的二进制字符串是否合法,再补前导0使长度为4的倍数,最后按4位一组转换为十六进制字符,返回大写结果。
测试示例
-- 测试十六进制转二进制 MESSAGE "Hex 'A3' to Bin: " + hexToBin("A3") VIEW-AS ALERT-BOX. -- 测试二进制转十六进制 MESSAGE "Bin '10100011' to Hex: " + binToHex("10100011") VIEW-AS ALERT-BOX.
内容的提问来源于stack exchange,提问作者nivs nivs
相关产品推荐
相关产品推荐

