首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将0和1的数组转换为base36字符串

将0和1的数组转换为base36字符串
EN

Stack Overflow用户
提问于 2010-05-12 21:18:56
回答 1查看 998关注 0票数 3

事情是这样的。我有一个由0和1组成的数组,它应该是一个二进制字符串。我需要的是将其格式化为包含从该二进制文件进行base36转换的字符串。换句话说,我需要这样做: array of 1 -> 0,->,某种二进制数,把它转换成字符串,base36,->,->。如何做到这一点?

数以千计的石油,300钢和+1幸运的答案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-05-12 22:28:36

没有内置Oracle来执行这种类型的转换。在下面的示例中,我使用了两个由the inestimable Mr Kyte验证的函数。to_dec()将其他基数转换为小数,to_base()将小数转换为其他基数。

该过程接受一个由1和0组成的数组,并返回一个基数为36的字符串。

代码语言:javascript
复制
create or replace type binary_nt as table of number(1,0);
/

create or replace function base2_to_base36 
    (p_onesnzeroes in binary_nt)
    return varchar2
is
    s_b2 varchar2(38);
    n_b10 pls_integer;
    s_b36 varchar2(38);
begin
    for i in 1..p_onesnzeroes.count()
    loop
        s_b2 := s_b2||trim(to_char(p_onesnzeroes(i)));
    end loop;

    n_b10 := to_dec(s_b2, 2);
    s_b36 := to_base(n_b10, 36);

    return s_b36;
end;
/

布丁的证明和所有这些..。

代码语言:javascript
复制
SQL> set serveroutput on size unlimited
SQL>     declare
  2          bins binary_nt := binary_nt(1,0,0,0,1,1,1,0);
  3          s varchar2(128);
  4      begin
  5          --  10001110 => 142  => 3Y
  6          s :=  base2_to_base36(bins);
  7          dbms_output.put_line(s);
  8      end;
  9      /
3Y

PL/SQL procedure successfully completed.

SQL>

编辑

当我组装这个示例时,您发布的0数组长度约为450个条目。这个例程不会处理这样的事情。它会在你达到这个大小之前抛出ORA-01426: numeric overflow

编辑2个

如果您愿意冒一点不精确的风险,您可以用BINARY_DOUBLE变量替换NUMBER变量(在我的示例和Tom的函数中都是如此)。该数据类型可以处理更大的数字。我把它调到了array_count=470,它在base 36中可能看起来像这样:

代码语言:javascript
复制
EKQA1EJ6QB4SC8WOOWKWGGOS4KWWWWCS4WCW4SCWCOSOOS888K4CSC8SWO8OCKC8SSCWCOGK844CKG00SOW8KGS0CC4
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2819114

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档