2009-08-04 16 views

Antwort

32

Wenn Sie 8.1.5 und höher verwenden, können Sie verwenden:

Um von hexadezimal zu konvertieren dezimal:

select to_number('AA', 'xx') from dual;  

Um von Dezimal in hexadezimal zu konvertieren:

select to_char(111, 'xxxx') from dual; 
+1

Danke für die Info. Die Verbindung ist jedoch tot. – amram99

+2

Vielen Dank für die gemeinsame Nutzung der Dezimalzahl in hexadezimale Zeichenfolge in Ihrer Antwort, obwohl es OP Frage überschritten. –

3

FTA: Oracle to Decimal:

CREATE OR REPLACE FUNCTION hex2dec (hexnum IN CHAR) RETURN NUMBER IS 
    i     NUMBER; 
    digits   NUMBER; 
    result   NUMBER := 0; 
    current_digit  CHAR(1); 
    current_digit_dec NUMBER; 
BEGIN 
    digits := LENGTH(hexnum); 
    FOR i IN 1..digits LOOP 
    current_digit := SUBSTR(hexnum, 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; 
/
show errors 

CREATE OR REPLACE FUNCTION num2hex (N IN NUMBER) RETURN VARCHAR2 IS 
    H VARCHAR2(64) :=''; 
    N2 INTEGER  := N; 
BEGIN 
    LOOP 
    SELECT RAWTOHEX(CHR(N2))||H 
    INTO H 
    FROM dual; 

    N2 := TRUNC(N2/256); 
    EXIT WHEN N2=0; 
    END LOOP; 
    RETURN H; 
END num2hex; 
/
show errors 
11
SELECT TO_NUMBER('DEADBEEF', 'XXXXXXXX') 
FROM dual 

--- 
3735928559 

SELECT TO_CHAR(3735928559, 'XXXXXXXX') 
FROM dual 
--- 
DEADBEEF 
5

Ab Oracle8i, die TO_CHAR und TO_NUMBER Funktionen können Konvertierungen von Basis 10 (dezimal) zu Basis 16 (hexadezimal) und wieder zurück hand :

SQL> select to_char(123,'XX') to_hex, 
2 to_number('7B','XX') from_hex 
3 from dual 
4/ 
TO_  FROM_HEX 
------ ----------------- 
7B  123 

source