oracle 将十六进制转换为字符串
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/19495308/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Convert hex to string
提问by frgtv10
I want to use HEXTORAW()to get the char value from the ASCII HEX code '30'.
ASCII HEX 30 should return varchar '0'.
我想用来HEXTORAW()从 ASCII 十六进制代码“30”中获取字符值。ASCII HEX 30 应返回 varchar '0'。
How to to that? Is HEXTORAW()the right function?
那怎么办?是HEXTORAW()正确的功能吗?
回答by Nick Krasnov
You could use utl_rawpackage and cast_to_varchar2()function specifically:
您可以专门使用utl_raw包和cast_to_varchar2()函数:
select utl_raw.cast_to_varchar2(hextoraw('30')) as res
from dual
result:
结果:
RES
-----
0
回答by Vincent Malgrat
回答by Maarten Malaise
I had some difficulties using characters from the extended ascii range (ISO Latin?1 ; ISO-8859?1). Solved it like this:
我在使用扩展的 ascii 范围(ISO Latin?1 ; ISO-8859?1)中的字符时遇到了一些困难。是这样解决的:
select chr(to_number('D6','xx') using NCHAR_CS) from dual
where hex value 'D6' matches (extended) ascii value 214 or character '?'
其中十六进制值 'D6' 匹配(扩展)ascii 值 214 或字符 '?'
or in a function
或在函数中
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;
The function can be used like this:
该函数可以这样使用:
select hex_to_ascii('30D6D0D1C7DC') from dual
The input hex string '30D6D0D1C7DC' will be converted to '0?D??ü'
输入的十六进制字符串 '30D6D0D1C7DC' 将被转换为 '0?D??ü'
I hope that this can be of use to others
我希望这对其他人有用

