以下内容包括: 1).提供两个进制转换包 2).提供进制转换的一些简便方法 3).提供进制转换的不同方法的性能评估 1.两个进制转换包 1)包PKG_DM_BASE_CONV(推荐) CREATE OR REPLACE PACKAGE PKG_DM_BASE_CONV AS FUNCTION hex_to_dec (hexnum IN char) RETURN NUMBER. PRAGMA restrict_references (HEX_TO_DEC,WNDS).
FUNCTION dec_to_hex (N IN NUMBER) RETURN VARCHAR2. PRAGMA restrict_references (DEC_TO_HEX,WNDS).
FUNCTION oct_to_dec (octin IN NUMBER) RETURN NUMBER. PRAGMA restrict_references (OCT_TO_DEC,WNDS).
FUNCTION dec_to_oct (decin IN NUMBER) RETURN VARCHAR2. PRAGMA restrict_references (DEC_TO_OCT,WNDS).
FUNCTION bin_to_dec (binin IN NUMBER) RETURN NUMBER. PRAGMA restrict_references (BIN_TO_DEC,WNDS).
FUNCTION dec_to_bin (decin IN NUMBER) RETURN VARCHAR2. PRAGMA restrict_references (DEC_TO_BIN,WNDS).
FUNCTION hex_to_bin (hexin IN VARCHAR2) RETURN NUMBER. PRAGMA restrict_references (HEX_TO_BIN,WNDS).
FUNCTION bin_to_hex (binin IN NUMBER) RETURN VARCHAR2. PRAGMA restrict_references (BIN_TO_HEX,WNDS).
FUNCTION oct_to_bin (octin IN NUMBER) RETURN NUMBER. PRAGMA restrict_references (OCT_TO_BIN,WNDS).
FUNCTION bin_to_oct (binin IN NUMBER) RETURN NUMBER. PRAGMA restrict_references (BIN_TO_OCT,WNDS).
FUNCTION oct_to_hex (octin IN NUMBER) RETURN VARCHAR2. PRAGMA restrict_references (OCT_TO_HEX,WNDS).
FUNCTION hex_to_oct (hexin IN VARCHAR2) RETURN NUMBER. PRAGMA restrict_references (HEX_TO_OCT,WNDS).
--十六进制字符转换成ASCII码字符 FUNCTION raw_to_char(v_raw LONG RAW) RETURN VARCHAR2. PRAGMA restrict_references (raw_to_char,WNDS).
--ASCII码字符转换成十六进制字符 FUNCTION char_to_raw(v_char varchar2) RETURN LONG RAW. PRAGMA restrict_references (char_to_raw,WNDS).
END PKG_DM_BASE_CONV. / CREATE OR REPLACE PACKAGE BODY PKG_DM_BASE_CONV AS
FUNCTION hex_to_dec (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 hex_to_dec.
FUNCTION dec_to_hex (N IN NUMBER) RETURN VARCHAR2 IS H VARCHAR2(64) := . N2 INTEGER := N. BEGIN LOOP SELECT rawtohex(chr(N2))||H INTO H FROM dual.