Pular para o conteúdo
Visualizando 4 posts - 1 até 4 (de 4 do total)
  • Autor
    Posts
  • #95115
    Muca
    Participante

      Senhores,

      Existe alguma função no Oracle que converta um valor hexadecimal para inteiro (number) e vice versa???
      Exemplo

      o hexadecimal ABCD convertido para inteiro 43.981;

      ja existe algo pronto?!?!?

      Obrigado!

      #95116
      Muca
      Participante

        [quote=”Muca”:4qjdmtx2]Senhores,

        Existe alguma função no Oracle que converta um valor hexadecimal para inteiro (number) e vice versa???
        Exemplo

        o 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…!!!

        #95121
        diego_aj
        Participante

          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!!!

          #95122
          Muca
          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

          Visualizando 4 posts - 1 até 4 (de 4 do total)
          • Você deve fazer login para responder a este tópico.