[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 --//这样可以快速查看实际的内容,提供工作效率.
[20190819]如何快速转换16进制串到字符串.txt
来源:这里教程网
时间:2026-03-03 14:07:49
作者:
编辑推荐:
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- 免费阅读正在杀死腾讯阅文?
免费阅读正在杀死腾讯阅文?
26-03-03 - Linux7.4 安装oracle 19C RAC
Linux7.4 安装oracle 19C RAC
26-03-03 - 如何调优 Oracle SQL系列的文章:SQL调优简介
如何调优 Oracle SQL系列的文章:SQL调优简介
26-03-03 - 如何调优 Oracle SQL系列文章:SQL性能方法论
如何调优 Oracle SQL系列文章:SQL性能方法论
26-03-03 - 都9102年了, 你还在考Oracle 11G、12C OCP?
都9102年了, 你还在考Oracle 11G、12C OCP?
26-03-03 - 拼多多正在彻底变成淘宝的子集
拼多多正在彻底变成淘宝的子集
26-03-03 - MySQL-巧用Join来优化SQL
MySQL-巧用Join来优化SQL
26-03-03 - 腾讯财报背后的小秘密:转型路上的未知
腾讯财报背后的小秘密:转型路上的未知
26-03-03 - 央视曝光瓜子泡水车,259项检测形同虚设
央视曝光瓜子泡水车,259项检测形同虚设
26-03-03 - 财报惊喜不断,京东彻底走出阴霾?
财报惊喜不断,京东彻底走出阴霾?
26-03-03
