如何将现有八进制转二进制代码修改为二进制转八进制功能代码
OpenEdge ABL 二进制转八进制函数实现
核心逻辑说明
- 输入约定:合法二进制串以
0b作为前缀标识 - 合法性校验:前缀后的字符仅允许出现
0和1,非法输入直接返回空值并弹出提示 - 转换规则:将前缀后的二进制内容从右向左按3位分组,不足3位的在左侧补0,每组对应1位0-7的八进制数字,最终返回符合你原有格式的
\开头的八进制串
完整实现代码
function bin2oct returns character ( input binaryString as character ): define variable i as integer no-undo. define variable n as integer no-undo. define variable c as character no-undo. define variable result as character no-undo. define variable binContent as character no-undo. define variable padLength as integer no-undo. define variable groupVal as integer no-undo. n = length( binaryString ). /* 校验前缀合法性 */ if n < 3 or substring( binaryString, 1, 2 ) <> "0b" then do: message "合法二进制串必须以0b开头". result = ?. return result. end. binContent = substring( binaryString, 3 ). n = length( binContent ). /* 校验字符合法性 */ do i = 1 to n: c = substring( binContent, i, 1 ). if asc( c ) <> 48 and asc( c ) <> 49 then do: message c "不是合法的二进制字符". result = ?. return result. end. end. /* 左侧补0使长度为3的倍数 */ padLength = (3 - n mod 3) mod 3. binContent = fill("0", padLength) + binContent. n = length(binContent). /* 逐组转换 */ result = "~\". do i = 1 to n step 3: groupVal = integer(substring(binContent, i, 1)) * 4 + integer(substring(binContent, i+1, 1)) * 2 + integer(substring(binContent, i+2, 1)) * 1. result = result + string(groupVal). end. return result. end function.
与原有oct2bin函数的调整点
- 输入前缀校验规则从匹配
\改为匹配0b - 合法字符范围从0-7缩小为仅0和1
- 新增二进制串补位逻辑,保证分组对齐
- 转换逻辑从单字符映射为3位二进制,改为3位二进制映射为单字符八进制
内容的提问来源于stack exchange,提问作者A Myf
相关产品推荐
相关产品推荐

