Как преобразовать целое число в шестнадцатеричную нотацию?
Использование: Firebird 2.5.3
В хранимой процедуре (PSQL) преобразование числа из шестнадцатеричной записи в десятичную выполняется легко:
DECLARE VARIABLE I INTEGER;
BEGIN
I = CAST('0x0FFFE' AS INTEGER); -- I will have the value 65534
Как можно добиться обратного? т.е.. Перевести из десятичной системы счисления в шестнадцатеричную?
1 ответ:
Если не использовать UDF (что означало бы использование внешнего файла библиотеки), то решение состоит в том, чтобы написать хранимую процедуру для выполнения этой задачи:
SET TERM ^^ ; CREATE PROCEDURE INTTOHEX ( INPUTNUMBER BigInt) returns ( OUTPUTNUMBER VarChar(8)) AS DECLARE VARIABLE Q BigInt; DECLARE VARIABLE R BigInt; DECLARE VARIABLE T BigInt; DECLARE VARIABLE H VARCHAR(1); DECLARE VARIABLE S VARCHAR(6); begin /* Max input value allowed is: 4294967295 */ S = 'ABCDEF'; Q = 1; OUTPUTNUMBER = ''; T = INPUTNUMBER; WHILE (Q <> 0) DO BEGIN Q = T / 16; R = MOD(T, 16); T = Q; IF (R > 9) THEN H = SUBSTRING(S FROM (R-9) FOR 1); ELSE H = R; OUTPUTNUMBER = H || OUTPUTNUMBER ; END SUSPEND; end ^^ SET TERM ; ^^Эту хранимую процедуру можно вызвать из стандартного SQL или другой хранимой процедуры, например:
Например:
SELECT OUTPUTNUMBER FROM INTTOHEX(65534);
Comments