将hex转换为字符串

时间:2013-10-21 13:02:27

标签: oracle plsql

我想使用HEXTORAW()从ASCII HEX代码'30'获取char值。 ASCII HEX 30应该返回varchar'0'。

怎么样? HEXTORAW()是正确的功能吗?

3 个答案:

答案 0 :(得分:5)

您可以专门使用utl_raw包和cast_to_varchar2()功能:

select utl_raw.cast_to_varchar2(hextoraw('30')) as res
  from dual

结果:

RES
-----
0

答案 1 :(得分:2)

您还可以使用CHR(对于单个字符):

SQL> select chr(to_number('30', 'XX')) from dual;

CHR(TO_NUMBER('30','XX'))
-------------------------
0

答案 2 :(得分:1)

使用扩展ascii范围(ISO Latin-1; ISO-8859-1)中的字符时遇到了一些困难。像这样解决了:

select chr(to_number('D6','xx') using NCHAR_CS) from dual

其中十六进制值'D6'匹配(扩展)ascii值214或字符'Ö'

或在函数中

create or replace function hex_to_ascii(TEXT_IN varchar2) 
RETURN varchar2
as
  TEXT_OUT varchar2(200);
  TEXT_MAN varchar2(200):=TEXT_IN;
BEGIN
  while length(TEXT_MAN)>0
  LOOP
    TEXT_OUT:=TEXT_OUT||chr(to_number(substr(TEXT_MAN,0,2),'xx') using NCHAR_CS);
    TEXT_MAN:=substr(TEXT_MAN,3);
  END LOOP;
  return TEXT_OUT; 
END;

该功能可以这样使用:

select hex_to_ascii('30D6D0D1C7DC') from dual

输入十六进制字符串'30D6D0D1C7DC'将转换为'0ÖÐÑÇÜ'

我希望这对其他人有用