如何将整数转换为十六进制表示法?

时间:2014-12-17 16:33:18

标签: firebird

使用:Firebird 2.5.3

在存储过程(PSQL)中,将数字从十六进制表示法转换为十进制表示法很容易:

DECLARE VARIABLE I INTEGER;

BEGIN

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

如何实现相反的目标?即。从十进制表示法转换为十六进制表示法?

1 个答案:

答案 0 :(得分:3)

如果不使用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);