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

oracle|转换|字符串

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

欢迎大家同我交流:enhydraboy   enhydra_boy@tom.com

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

下面是笔者以前回答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么

 

时间: 2024-11-03 12:34:25

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

jstack:将Process Explorer中看到的进程ID做16进制转换,到ThreadDump中加上0x 前缀即能找到对应线程(转)

原文链接:http://www.iteye.com/topic/1133941 症状: 使用Eclipse win 64位版本,indigo及kepler都重现了,使用tomcat 6.0.39,jdk1.6.u45及1.7u45均尝试了,也重现. 重现步骤很简单,使用debug模式启动时较容易出来,debug启动tomcat,(我的是webapp)然后在页面上随便点点即发现eclipse僵死,且任何从浏览器发出的请求都卡住不能被接收执行. 1.然后从任务管理器直接杀掉eclipse对应的jav

c语言-如何将数字字符串转为16进制字符串?

问题描述 如何将数字字符串转为16进制字符串? 请教一个示例:如何将数字字符串转为16进制字符串?字符串:char str[20]="1234567890123456";将中间的"789012"转换为16进制的"0C0A14":最后str=""1234560C0A143456"" 如果有描述不清的地方,请指出.多谢! 解决方案 你先用字符串截取到 比如strstr等,""789012&q

vb.net 字符串转16进制

问题描述 字符串1:sd13A你好字符串2:2014年08月23日星期六8:59:23把字符串转16进制---------求代码!再把16进制转回中文---求代码!额,就是求互转代码!新手求助! 解决方案 解决方案二:"字符串转16进制"这个说法缺乏必要的逻辑性.只有一个整数才能表现为2进制.8进制.10进制.16进制之类的概念.字符串是一个高级的概念,那么你的逻辑就应该稍微高级一点.比如说"unicode编码的byte[]数组"."byte[]数组的ba

php 打印出字符串的16进制

 代码如下 复制代码 <?php /* php 打印出字符串的16进制数据 */ function hex_dump($data, $newline="n") {   static $from = '';   static $to = '';     static $width = 16; # number of bytes per line     static $pad = '.'; # padding for non-visible characters     if ($

[20121207]vim中使用bc做10与16进制计算.txt

[20121207]vim中使用bc做10与16进制计算.txt 工作中需要经常做10与16进制的转换,我记得以前有一个插件与vim结合可以实现简单的计算功能,比在平时输入是时输入ctrl+r=计算式(在插入模式)要方便一些,我个人计算时经常使用.链接如下: http://www.vim.org/scripts/script.php?script_id=219http://space.itpub.net/267265/viewspace-82924 实际上作者给出的例子,好像也可以实现,我感觉不

关于byte 进制 float String 编码 16进制字符串转16进制byte的问题

首先 只有String才与编码有关: byte与其他类型转换时,要注意大端点还是小端点, 编码: Ascii Unicode gbk utf-8等等  byte 占 8位 可由两个16进制数(0xff)组成,一个16进制占4位,也可由8位二进制数组成等等,与编码没关系,但可用2进制表示,也可由其他进制表示. "0xff"这样的16进制字符串转换成16进制byte String[] s="0X0C 0X03 0X00 0X04 0X00 0X02 0X84 0XD7"

16进制字符串-C# 16进制的字符串转byte数组

问题描述 C# 16进制的字符串转byte数组 如字符串:0xFF 0x01 0x01 0x02 0xEE 转换成byte byte[0]=0xFF; byte[1]=0x01

vbscript语句中“&amp;amp;amp;H”专用于16进制数表示_vbs

原来在vbscript语句中"&H"专用于16进制数表示的.在使用"&"这个符号用于字串连接时,应该在两侧加上一个空格,虽然不加空格在多数情况下运行是正常的,但那是不正确的或不规范的写法.在出现以字母"h"开头的字段时,如有这样的语句: sql = "insert into Student(xxx,xxx) values('"&htitle&"','"&hname&a

字符串转为16进制

字符串 string StrToHex(string str){string strTemp = ""; if(str="") return "";byte[] bTemp = System.Text.Encoding.Default.GetBytes(str); for(int i = 0;i<bTemp.Length;i++){strTemp += bTemp[i].ToString("X");}return str