- Este tópico contém 3 respostas, 2 vozes e foi atualizado pela última vez 15 anos, 8 meses atrás por
Muca.
-
AutorPosts
-
19 de julho de 2010 às 6:37 pm #95115
Muca
ParticipanteSenhores,
Existe alguma função no Oracle que converta um valor hexadecimal para inteiro (number) e vice versa???
Exemploo hexadecimal ABCD convertido para inteiro 43.981;
ja existe algo pronto?!?!?
Obrigado!
19 de julho de 2010 às 6:45 pm #95116Muca
Participante[quote=”Muca”:4qjdmtx2]Senhores,
Existe alguma função no Oracle que converta um valor hexadecimal para inteiro (number) e vice versa???
Exemploo hexadecimal ABCD convertido para inteiro 43.981;
ja existe algo pronto?!?!?
Obrigado![/quote]
Acabei encontrando algo nesse meio tempo… seguem os codigos:
HEXADECIMAL PARA DECIMAL
CREATE OR REPLACE FUNCTION hex2dec (hexval in char) RETURN number IS
i number;
digits number;
result number := 0;
current_digit char(1);
current_digit_dec number;
BEGIN
digits := length(hexval);
for i in 1..digits loop
current_digit := SUBSTR(hexval, i, 1);
if current_digit in (‘A’,’B’,’C’,’D’,’E’,’F’) then
current_digit_dec := ascii(current_digit) – ascii(‘A’) + 10;
else
current_digit_dec := to_number(current_digit);
end if;
result := (result * 16) + current_digit_dec;
end loop;
return result;
END hex2dec;DECIMAL PARA HEXADECIMAL
CREATE OR REPLACE FUNCTION dec2hex (N in number) RETURN varchar2 IS
hexval varchar2(64);
N2 number := N;
digit number;
hexdigit char;
BEGIN
while ( N2 > 0 ) loop
digit := mod(N2, 16);
if digit > 9 then
hexdigit := chr(ascii(‘A’) + digit – 10);
else
hexdigit := to_char(digit);
end if;
hexval := hexdigit || hexval;
N2 := trunc( N2 / 16 );
end loop;
return hexval;
END dec2hex;é isso … acredito que o topico esteja resolvido!
Valeu…!!!
19 de julho de 2010 às 9:41 pm #95121diego_aj
ParticipanteBoa tarde Muca,
Segue abaixo dois selects que já fazem o que você quer, sem ser necessário fazer essas funções.
select sys_op_rawtonum('ABCD') from dual;select sys_op_numtoraw('43981') from dual;
flw!!!
19 de julho de 2010 às 9:58 pm #95122Muca
Participante[quote=”diego_aj”:1r4sb0ha]Boa tarde Muca,
Segue abaixo dois selects que já fazem o que você quer, sem ser necessário fazer essas funções.
select sys_op_rawtonum('ABCD') from dual;select sys_op_numtoraw('43981') from dual;
flw!!![/quote]
As funções ja resolviam meu problema, mas era isso que eu tava querendo no início, algo simples e que ja estivesse pronto,
de qualquer maneira o problema foi resolvido…!!Valeu diego_aj
Abraço
-
AutorPosts
- Você deve fazer login para responder a este tópico.