ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 10进制和16进制互转的例子

10进制和16进制互转的例子

原创 Linux操作系统 作者:kewin 时间:2011-08-26 22:03:27 0 删除 编辑
10进制和16进制互转
Kevin Zou
2011-8-26

在工作当中常会遇到10进制和16进制互转,比如LATCH的ADDRESS。
在一个latch: cache buffers chains 中,ADDRESS用10进制记录,可在V$LATCH_ADDRESS是用RAW,16进制查看的。这就要不同进制之间进行转换。
10-> 16: to_char
16-> 10: to_number
如这句10046中摘出来的片段:
WAIT #2: nam='latch: cache buffers chains' ela= 7 address=504403174424697944 number=124 tries=0 obj#=-1 tim=51874243369174
这里address=504403174424697944,那转为16进制是:
10-> 16
select to_char(504403174424697944 ,'XXXXXXXXXXXXXXXXXXX') as a from dual;

A
----------------------------------------
     7000003C329DC58

 这里有个需要注意的地方,需要在在得出的16进制前加上一个0。
SYS@hr9prd>SELECT addr, latch#, gets, misses, sleeps
  2       FROM v$latch_children  
     WHERE sleeps>0          
     and latch# = 124 and ADDR ='7000003C329DC58'
     ORDER BY sleeps desc;  3    4    5  

no rows selected

Elapsed: 00:00:00.19

SYS@hr9prd>select addr from v$latch_children where rownum < 10;

ADDR
----------------
07000003CA029C40
07000003CA029D00
07000003CA029DC0
07000003CA029E80
07000003CA029F40
07000003CA02A000
07000003C9330F10
07000003C9330FB0
07000003C9331050

9 rows selected.

Elapsed: 00:00:00.19
SYS@hr9prd>SELECT addr, latch#, gets, misses, sleeps
  2       FROM v$latch_children  
     WHERE sleeps>0          
     and latch# = 124 and ADDR ='07000003C329DC58'
     ORDER BY sleeps desc;  3    4    5  

ADDR                 LATCH#       GETS     MISSES     SLEEPS
---------------- ---------- ---------- ---------- ----------
07000003C329DC58        124  746345133     631839       2118

Elapsed: 00:00:00.18

如果知道了RAW地址,求10进制的地址,可以用to_number 函数。
16-> 10
SYS@hr9prd>col a format 99999999999999999999999999
SYS@hr9prd> select  to_number('7000003C329DC58', 'XXXXXXXXXXXXXXXXXXXXXX')  as a from dual;

                          A
---------------------------
         504403174424697944

Elapsed: 00:00:00.01

需要注意如果转换后的位数过多,而未能在格式中包括全部的位数,那会报错:
SYS@hr9prd> select  to_number('7000003C329DC58', 'XXXXXXXXXXXX') from dual;
 select  to_number('7000003C329DC58', 'XXXXXXXXXXXX') from dual
                   *
ERROR at line 1:
ORA-01722: invalid number

总结:
10进制到16进制,使用to_char 函数;
16进制到10进制,使用to_number函数;

-THE END-

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/40239/viewspace-705910/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-03-10

  • 博文量
    125
  • 访问量
    578609