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

如何将现有八进制转二进制代码修改为二进制转八进制功能代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 15:45:03