Back

Decimal to Binary conversion and vice versa

CREATE OR REPLACE FUNCTION bin2dec (binval in char) RETURN number IS

i number;

digits number;

result number := 0;

current_digit char(1);

current_digit_dec number;

BEGIN

digits := length(binval);

for i in 1..digits loop

current_digit := SUBSTR(binval, i, 1);

current_digit_dec := to_number(current_digit);

result := (result * 2) + current_digit_dec;

end loop;

return result;

END bin2dec;

/



SQL> SELECT bin2dec('10110') FROM dual;

BIN2DEC('10110')

----------------

22





CREATE OR REPLACE FUNCTION dec2bin (N in number) RETURN varchar2 IS

binval varchar2(64);

N2 number := N;

BEGIN

while ( N2 > 0 ) loop

binval := mod(N2, 2) || binval;

N2 := trunc( N2 / 2 );

end loop;

return binval;

END dec2bin;

/



SQL> SELECT dec2bin(22) FROM dual;

DEC2BIN(22)

----------------

10110