[20190819]如何快速转换16进制串到字符串.txt

[20190819]如何快速转换16进制串到字符串.txt

--//ITPUB网友问的问题,我一般使用如下函数转换:
$ cat conv_c.sql
select utl_raw.cast_to_varchar2(lower('&1')) c60 from dual;

$ cat conv_n.sql
select utl_raw.cast_to_number(lower('&1')) n20 from dual;

1.环境:
SCOTT@test01p> @ ver1
PORT_STRING                    VERSION        BANNER                                                                               CON_ID
------------------------------ -------------- -------------------------------------------------------------------------------- ----------
IBMPC/WIN_NT64-9.1.0           12.2.0.1.0     Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production              0

2.测试:
SQL> select dump('BOOTSTRAP$',16) from dual;
DUMP('BOOTSTRAP$',16)
--------------------------------------------
Typ=96 Len=10: 42,4f,4f,54,53,54,52,41,50,24

SCOTT@test01p> @ conv_c 424f4f54535452415024
C60
------------------------------------------------------------
BOOTSTRAP$

--//缺点当然是必须在启动数据库的情况下执行。
--//实际上有时候获得16进制字符串并不符合规定的格式,比如转储文件或者bbed,必须首先编辑处理。
--//比如常见的格式如下:
0x42 0x4F 0x54 0x53 0x54 0x52 0x41 0x50 0x24
0x42,0x4f,0x54,0x53,0x54,0x52,0x41,0x50,0x24
42,4f,4f,54,53,54,52,41,50,24
424f4f54535452415024

SCOTT@test01p> select rowid,dept.* from dept where rownum=1;
ROWID                  DEPTNO DNAME                LOC
------------------ ---------- -------------------- -------------
AAAFfXAALAAAACEAAA         10 ACCOUNTING           NEW YORK

SCOTT@test01p> @ rowid AAAFfXAALAAAACEAAA
OBJECT FILE BLOCK        ROW ROWID_DBA  DBA    TEXT
------ ---- ----- ---------- ---------- ------ ----------------------------------------
 22487   11   132          0  0x2C00084 11,132 alter system dump datafile 11 block 132

BBED> set dba 11,133
        DBA             0x02c00085 (46137477 11,133)
--//注:windows下bbed存在+1的偏移.
    
BBED> x /rnxx *kdbr[1]
rowdata[44]                                 @8140
-----------
flag@8140: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@8141: 0x01
cols@8142:    3

col    0[2] @8143: 20
col    1[8] @8146:  0x52  0x45  0x53  0x45  0x41  0x52  0x43  0x48
col    2[6] @8155:  0x44  0x41  0x4c  0x4c  0x41  0x53

--//如果能有一种方式实现快速知道或者显示对应字符串,能大大提高分析处理问题的工作效率。
--//我经常使用vim自带xxd实现类似的功能,加入-r参数就是反向操作,因为前面没有偏移量必须加入-ps(我的测试-p也是ok的)。
424f4f54535452415024
--//具体操作如下,移动到上面一行,直接输入<ESC>!!xxd -r -p<CR>,这样上面的内容就显示为BOOTSTRAP$.
--//缺点就是覆盖原来的显示。注意xxd要在PATH路径访问中。我个人的工作习惯将一些常用的小命令拷贝到D:\tools\short目录下。
--//然后将D:\tools\short加入到PATH环境变量中。
--//经常打入不是非常方便,在vim下可以定义如下快捷,放入_vimrc.vim配置文件中,注我一般会定义一个文件(xxd.vim)单独保存:
--//这样避免覆盖.

noremap  <leader>xxd Yp!!xxd -r -p<CR>kA = <ESC>J
vnoremap  ;xxd       "ay<ESC>o<ESC>"apo<ESC>"ap!!xxd -r -p<CR>kA = <ESC>J

--//这样执行\xxd,显示如下:"
424f4f54535452415024 = BOOTSTRAP$
0x52  0x45  0x53  0x45  0x41  0x52  0x43  0x48 = RESEARCH

--//上面几种格式都可以处理:
0x42 0x4F 0x54 0x53 0x54 0x52 0x41 0x50 0x24 = BOTSTRAP$
0x42,0x4F,0x54,0x53,0x54,0x52,0x41,0x50,0x24 = BOTSTRAP$
42,4f,4f,54,53,54,52,41,50,24  = BOOTSTRAP$
424f4f54535452415024 = BOOTSTRAP$

--//也可以这样操作,按v或者V,选中文本,进入v模式,然后打入;xxd.
--//提醒一下,如果使用shift+方向键选择的进入的是"选择模式",按ctrl+g就可以切换为"可视模式",再打入;xxd就会得到如下显示效果:

col    1[8] @8146:  0x52  0x45  0x53  0x45  0x41  0x52  0x43  0x48
0x52  0x45  0x53  0x45  0x41  0x52  0x43  0x48 = RESEARCH

SQL> select dump('BOOTSTRAP$',16) from dual;
DUMP('BOOTSTRAP$',16)
--------------------------------------------
Typ=96 Len=10: 42,4f,4f,54,53,54,52,41,50,24
42,4f,4f,54,53,54,52,41,50,24  = BOOTSTRAP$

3.命令行执行方式:
--//另外也可以在命令行上执行:
d:\> echo 42,4f,4f,54,53,54,52,41,50,24 | xxd -r -p
BOOTSTRAP$

d:\>echo 0x42,0x4F 0x54 0x53 0x54 0x52 0x41 0x50 0x24 | xxd -r -p
BOTSTRAP$

4.更复杂的情况:
--//如果看intel cpu系列服务器的内存转储,存在一个大小头问题,高字节显示在前面,低字节在后面,4个4个颠倒。
--//举一个数据块的转储例子:
SCOTT@test01p> alter system dump datafile 11 block 132;
System altered.

--//检查转储文件内容:
...
001992FA0 0203012C 4F0A29C1 41524550 4E4F4954  [,....).OPERATION]
001992FB0 4F420653 4E4F5453 0203012C 53051FC1  [S.BOSTON,......S]
001992FC0 53454C41 49484307 4F474143 0203012C  [ALES.CHICAGO,...]
001992FD0 520815C1 41455345 06484352 4C4C4144  [...RESEARCH.DALL]
001992FE0 012C5341 0BC10203 4343410A 544E554F  [AS,......ACCOUNT]
001992FF0 08474E49 2057454E 4B524F59 E9040601  [ING.NEW YORK....]
...
Block header dump:  0x02c00084
 Object id on Block? Y
 seg/obj: 0x57d7  csc:  0x000000000010e8fb  itc: 2  flg: E  typ: 1 - DATA
     brn: 0  bdba: 0x2c00080 ver: 0x01 opc: 0
     inc: 0  exflg: 0
 
 Itl           Xid                  Uba         Flag  Lck        Scn/Fsc
0x01   0x0006.014.00000149  0x01806275.0033.5a  --U-    4  fsc 0x0000.0010e904
0x02   0x0000.000.00000000  0x00000000.0000.00  ----    0  fsc 0x0000.00000000
bdba: 0x02c00084
data_block_dump,data header at 0x1991064
===============
tsiz: 0x1f98
hsiz: 0x1a
pbl: 0x01991064
     76543210
flag=--------
ntab=1
nrow=4
frre=-1
fsbo=0x1a
fseo=0x1f3c
avsp=0x1f22
tosp=0x1f22
0xe:pti[0]    nrow=4    offs=0
0x12:pri[0]    offs=0x1f7e
0x14:pri[1]    offs=0x1f68
0x16:pri[2]    offs=0x1f54
0x18:pri[3]    offs=0x1f3c
block_row_dump:
tab 0, row 0, @0x1f7e
tl: 26 fb: --H-FL-- lb: 0x1  cc: 3
col  0: [ 2]  c1 0b
col  1: [10]  41 43 43 4f 55 4e 54 49 4e 47
--//41 43 43 4f 55 4e 54 49 4e 47 = ACCOUNTING,选中然后打入;xxd,ok!!
col  2: [ 8]  4e 45 57 20 59 4f 52 4b
tab 0, row 1, @0x1f68
tl: 22 fb: --H-FL-- lb: 0x1  cc: 3
col  0: [ 2]  c1 15
col  1: [ 8]  52 45 53 45 41 52 43 48
col  2: [ 6]  44 41 4c 4c 41 53

--//再增加如下快捷:
noremap  <leader>xx4 Yp!!xxd -r -p \|od -t x4 \| xxd -r<CR>kA = <ESC>J
vnoremap  ;xx4       "ay<ESC>o<ESC>"apo<ESC>"ap!!xxd -r -p\|od -t x4 \| xxd -r<CR>kA = <ESC>J

--//注意 管道|前要打入\,转义一下。测试":

001992FA0 0203012C 4F0A29C1 41524550 4E4F4954  [,....).OPERATION]
001992FB0 4F420653 4E4F5453 0203012C 53051FC1  [S.BOSTON,......S]
001992FC0 53454C41 49484307 4F474143 0203012C  [ALES.CHICAGO,...]
001992FD0 520815C1 41455345 06484352 4C4C4144  [...RESEARCH.DALL]
          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
001992FE0 012C5341 0BC10203 4343410A 544E554F  [AS,......ACCOUNT]
001992FF0 08474E49 2057454E 4B524F59 E9040601  [ING.NEW YORK....]

--//测试下划线内容:
--//截取下划线内容为一行,打入\xx4显示如下:
520815C1 41455345 06484352 4C4C4144 = ?RESEARCHDALL
--//对比前面的显示基本一致.

--//测试;xx4
001992FE0 012C5341 0BC10203 4343410A 544E554F  [AS,......ACCOUNT]
012C5341 0BC10203 4343410A 544E554F = AS,?
ACCOUNT
--//按小写v选中012C5341到544E554F,打入;xx4,显示如上,因为里面有0A(回车),这样ACCOUNT显示在下一行.

001992FF0 08474E49 2057454E 4B524F59 E9040601  [ING.NEW YORK....]
08474E49 2057454E 4B524F59 E9040601 = INGNEW YORK?

--//如果想看^H表示什么可以一定要该字符按ga,提示行显示:
<^H>  8,  十六进制 08,  八进制 010

5.总结
--//最终修改如下:
$ cat xxd.vim
noremap  <leader>xxd Yp!!xxd -r -p<CR>kA = <ESC>J
vnoremap  ;xxd       "ay<ESC>o<ESC>"apo<ESC>"ap!!xxd -r -p<CR>kA = <ESC>J
noremap  <leader>xx4 Yp!!xxd -r -p \|od -t x4 \| xxd -r<CR>kA = <ESC>J
vnoremap  ;xx4       "ay<ESC>o<ESC>"apo<ESC>"ap!!xxd -r -p\|od -t x4 \| xxd -r<CR>kA = <ESC>J

--//修改_vimrc.vim配置,加入":
source c:\vim\vim73\xxd.vim

--//这样可以快速查看实际的内容,提供工作效率.

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

转载于:http://blog.itpub.net/267265/viewspace-2654338/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GeoPandas是一个开源的Python库,旨在简化地理空间数据的处理和分析。它结合了Pandas和Shapely的能力,为Python用户提供了一个强大而灵活的工具来处理地理空间数据。以下是关于GeoPandas的详细介绍: 一、GeoPandas的基本概念 1. 定义 GeoPandas是建立在Pandas和Shapely之上的一个Python库,用于处理和分析地理空间数据。 它扩展了Pandas的DataFrame和Series数据结构,允许在其中存储和操作地理空间几何图形。 2. 核心数据结构 GeoDataFrame:GeoPandas的核心数据结构,是Pandas DataFrame的扩展。它包含一个或多个列,其中至少一列是几何列(geometry column),用于存储地理空间几何图形(如点、线、多边形等)。 GeoSeries:GeoPandas中的另一个重要数据结构,类似于Pandas的Series,但用于存储几何图形序列。 二、GeoPandas的功能特性 1. 读取和写入多种地理空间数据格式 GeoPandas支持读取和写入多种常见的地理空间数据格式,包括Shapefile、GeoJSON、PostGIS、KML等。这使得用户可以轻松地从各种数据源中加载地理空间数据,并将处理后的数据保存为所需的格式。 2. 地理空间几何图形的创建、编辑和分析 GeoPandas允许用户创建、编辑和分析地理空间几何图形,包括点、线、多边形等。它提供了丰富的空间操作函数,如缓冲区分析、交集、并集、差集等,使得用户可以方便地进行地理空间数据分析。 3. 数据可视化 GeoPandas内置了数据可视化功能,可以绘制地理空间数据的地图。用户可以使用matplotlib等库来进一步定制地图的样式和布局。 4. 空间连接和空间索引 GeoPandas支持空间连接操作,可以将两个GeoDataFrame按照空间关系(如相交、包含等)进行连接。此外,它还支持空间索引,可以提高地理空间数据查询的效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值