[HOWTO]ORACLE中如何实现ASC字符串和16进制串互相转换

原创 2003年07月23日 09:50:00

ORACLE中如何实现ASC字符串和16进制串互相转换

欢迎大家同我交流:enhydraboy   enhydra_boy@tom.com<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

欢迎转载,请保留本声明,谢谢!

下面是笔者以前回答csdn论坛上问题的总结,希望对大家有用。

ASC字符串==>16进制串

create or replace function AscToHex(sIn IN varchar2)
RETURN varchar2
IS
sTmp varchar2(4000);
i integer;
BEGIN
i:=1;
stmp:='';
for i in 1..length(sIn) loop
   sTmp:=sTmp||trim(to_char(ascii(substr(sIn,i,1)),'XXXX'));
end loop;
return sTmp;
END;
/

16进制串==>ASC字符串
要区分字符集,以中文字符为例,对于数据库字符集是中文,要保证能够正确转回来,要有所不同。

数据库字符集是中文

create or replace function HexToAsc(sIn IN varchar2)
RETURN varchar2
IS
sTmp varchar2(4000);
i integer;
x integer;
BEGIN
i:=1;
stmp:='';
loop
   exit when i>length(sIn);
   x:=to_number(substr(sIn,i,2),'XXXX');
   if x>128 then
     sTmp:=sTmp||chr(to_number(substr(sIn,i,4),'XXXX'));
     i:=i+4;
   else
     sTmp:=sTmp||chr(to_number(substr(sIn,i,2),'XXXX'));
     i:=i+2;
   end if;
  
end loop;
return sTmp;
END;
/

数据库字符集是英文

create or replace function HexToAsc(sIn IN varchar2)
RETURN varchar2
IS
sTmp varchar2(4000);
i integer;
BEGIN
i:=1;
stmp:='';
loop
   exit when i>length(sIn);
   sTmp:=sTmp||chr(to_number(substr(sIn,i,2),'XXXX'));
   i:=i+2;
end loop;
return sTmp;
END;
/

测试,如下:

SQL>select hextoasc(asctohex('你好ABC么')) from dual;
HEXTOASC(ASCTOHEX('拿好ABC么'))
--------------------------------------------------------------------------------
你好ABC么


 

16进制到ASC 的互转

short CXt_task3_appDlg::hex_asc(unsigned char *hex, unsigned char *asc, long length) { UCHAR hLowbi...
  • scutedu
  • scutedu
  • 2016年06月17日 10:00
  • 1929

Oracle中各种进制相互转换

一、自带函数可实现十进制与十六
  • heqiyu34
  • heqiyu34
  • 2014年08月09日 23:04
  • 4252

用C++实现ASCII码字符数组转16进制字符数组的功能

在网络通信中经常用到16进制和ASCII码字符数组互相转换的功能,虽然功能简单,但初学者写出来的代码经常会有各种问题。从ASCII码字符数组转为16进制字符数组,一个判断比较完整的实现代码如下: bo...
  • gzliudan
  • gzliudan
  • 2014年04月12日 08:54
  • 3080

关于十六进制、asc码

在串口调试助手、网络调试助手中可以见到十六进制发送、十六进制接收等选项,对于字符,选中十六进制时,是将其asc编码转成了十六进制形式,如:a -- 97  对应的是61, 其实就是将字符的asc编码...
  • u012252959
  • u012252959
  • 2015年10月10日 16:03
  • 743

ORACLE中如何实现ASCII字符串和16进制串互相转换

ASCII字符串==>16进制串create or replace function AscToHex(sIn IN varchar2)RETURN varchar2ISsTmp varchar2(4...
  • chensheng913
  • chensheng913
  • 2005年07月07日 18:24
  • 6884

C++ MFC ASCII码 字符 和十进制 或 十六进制字符串 互相转化

C++ MFC ASCII码 字符 和十进制 或 十六进制字符串 互相转化 c++C++mfcMFC [cpp] view plaincopy // char *pB...
  • jearmy
  • jearmy
  • 2014年11月12日 20:36
  • 1745

Oracle - 利用自带函数进行16进制与字符互转

在查看Apache log时,经常在url里面混杂着%3A,%2F等字符,究竟代表什么?只需通过Oracle自带函数转换下就可。根据16进制查字符:select chr(to_number('2F',...
  • t0nsha
  • t0nsha
  • 2012年11月22日 22:04
  • 8855

ASCII格式的16进制字符串转到ASCII字符串

本程序实现的功能是将ASCII格式的16进制字符串转到ASCII字符串。例如,字符串“6a61636b”可转化为jack。 啥都不说了,先给程序 // // main.cpp // hex_2_a...
  • wula_think
  • wula_think
  • 2014年03月18日 22:46
  • 2373

[Python] 十六进制整数与ASCii编码字符串相互转换

在使用Pyserial与STM32进行通讯时,遇到了需要将十六进制整数以Ascii码编码的字符串进行发送并且将接收到的Ascii码编码的字符串转换成十六进制整型的问题。查阅网上的资料后,均没有符合要求...
  • sinat_21258931
  • sinat_21258931
  • 2017年04月25日 13:42
  • 3323

vc中把字符串转换成16进制数的函数(如'7f'->0x7f)

sswanglei 发表于 2007-2-9 16:08:00 /*-------------------------------------------...
  • jiangxinyu
  • jiangxinyu
  • 2007年03月13日 16:32
  • 3772
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[HOWTO]ORACLE中如何实现ASC字符串和16进制串互相转换
举报原因:
原因补充:

(最多只允许输入30个字)