Как преобразовать целое число в шестнадцатеричную нотацию?



Использование: Firebird 2.5.3



В хранимой процедуре (PSQL) преобразование числа из шестнадцатеричной записи в десятичную выполняется легко:



DECLARE VARIABLE I INTEGER;

BEGIN

I = CAST('0x0FFFE' AS INTEGER); -- I will have the value 65534


Как можно добиться обратного? т.е.. Перевести из десятичной системы счисления в шестнадцатеричную?

647   1  

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

    Ничего не найдено.