Conversão decimal para qualquer base

Resumo
Função que converte um número decimal para qualquer outra base.

Uso
A função recebe 3 parâmetros:
p_decimal: número a ser convertido
p_base: base desejada
p_tamanho: tamanho da string de retorno

Exemplo:

select dec_to( 255, 16 ) from dual; — converte 255 para base hexadecimal
select dec_to( 255, 2, 8 ) from dual; — converte 255 para base binária, com 8 caracteres na saída

Codificação

create or replace function dec_to( p_decimal number,
p_base pls_integer,
p_tamanho pls_integer default 2 ) return varchar2 is –
– conversao de bases: decimal para qualquer base

– Claudio A. Coelho – 12.09.2001


sRetorno varchar2(50);
sRESTO varchar2(50);
nQUOC number;
nRESTO pls_integer;
nTam pls_integer;

begin
nQUOC := p_decimal;
sRESTO := ”;

if nQUOC = 0 then
sRetorno := ‘0′;
goto fim;
end if;

while nQUOC > 0 loop
if nQUOC > 1 then
nRESTO := MOD( nQUOC, p_base );
nQUOC := TRUNC( nQUOC/p_base );
else
nRESTO := 1;
nQUOC := 0;
end if;
if nResto < 10 then
sRESTO := sRESTO || to_char(nRESTO);
else
sRESTO := sRESTO || chr(65+nResto-10);
end if;
end loop;

sRetorno := ”;
nTam := LENGTH( sRESTO );
for i in 0..nTam-1 loop
sRetorno := sRetorno || substr( sRESTO, nTam-i, 1 );
end loop;

<<fim>>
return ( LPAD( sRetorno, p_tamanho, ‘0′ ) );

end dec_to;

Deixe um comentário