10進数と 16進数の基数変換
16進数、10進数変換 (HEXTODEC ファンクション)
その1 ('0000000'x 〜 '7FFFFFFF'x までが有効範囲)
CREATE OR REPLACE FUNCTION RIVUS.HEXTODEC(P_HEX IN VARCHAR2)
RETURN NATURAL
AS
BEGIN
RETURN UTL_RAW.CAST_TO_BINARY_INTEGER(HEXTORAW(P_HEX));
END;
/
その2 ( NUMBER 型まで有効:但し、自然数のみ有効で Oracle 9i 以降 )
CREATE OR REPLACE FUNCTION RIVUS.HEXTODEC(P_HEX IN VARCHAR2)
RETURN NUMBER
AS
vHexString VARCHAR2(16);
vHexChar CHAR(1 CHAR);
vDigit NUMBER;
vDecimal NUMBER;
BEGIN
vDecimal := 0;
vHexString := UPPER(LTRIM(P_HEX,'0'));
FOR i IN 1 .. LENGTH(vHexString)
LOOP
vHexChar := SUBSTR(vHexString, i, 1);
CASE vHexChar
WHEN 'A' THEN vDigit := 10;
WHEN 'B' THEN vDigit := 11;
WHEN 'C' THEN vDigit := 12;
WHEN 'D' THEN vDigit := 13;
WHEN 'E' THEN vDigit := 14;
WHEN 'F' THEN vDigit := 15;
ELSE vDigit := TO_NUMBER(vHexChar);
END CASE;
vDecimal := 16 * vDecimal + vDigit;
END LOOP;
RETURN vDecimal;
EXCEPTION
WHEN OTHERS THEN
RETURN 0;
END;
/
⇒ CASE 文
10進数、16進数変換 (DECTOHEX ファンクション)
10進数から 16進数への変換関数は、TO_CHAR 関数 で記述できる。
CREATE OR REPLACE FUNCTION RIVUS.DECTOHEX(P_DEC IN NUMBER)
RETURN VARCHAR2
AS
BEGIN
RETURN TO_CHAR(P_DEC,'FMXXXXXXXXXXXXXXXX');
END;
/
16進数変換 関連事項