How do I convert an integer to hexadecimal notation?

Usage: Firebird 2.5.3

In a stored procedure (PSQL), converting a number from hexadecimal notation to decimal notation is easy:

DECLARE VARIABLE I INTEGER;

BEGIN

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

      

How can you achieve the opposite? i.e. Convert from decimal notation to hexadecimal notation?

+3


source to share


1 answer


Except for using a UDF (which would mean using an external library file), the solution is to write a stored procedure to do this:

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 ; ^^

      

You can call this stored procedure from standard SQL or other stored procedure, for example:



For example:

SELECT OUTPUTNUMBER FROM INTTOHEX(65534);

      

+3


source







All Articles