我正在寻找一种方法来搜索二进制文件的十六进制转储中一系列十六进制数字的文本表示形式,如下所示:
0x000001A0: 36 5B 09 76 99 31 55 09 78 99 34 51 49 BF E0 03
0x000001B0: 28 0B 0A 03 0B E0 07 28 0B 0A 03 0B 49 58 09 35
问题是模式可能会滚动到下一行。例如,在上面两行中,我无法立即搜索03 28 0B
因为它跨越两条线。
最近的帖子告诉我,正则表达式是最好的选择,但我不熟悉它,也不知道该使用什么:Notepad++、Vim、Word 或其他任何东西。
Edit 1:显示上述内容的文本文件是从二进制文件派生的,我可以使用 Notepad++。
Edit 2:举个例子,假设我试图尽可能接近 11:45:00(军用时间)。03 28 0B 0A 03 0B
分散在上面的两行中,可以读作“2011 年 3 月 10 日 3 秒 40 分钟 11 小时”。我正在寻找一种方法来浏览此文件,以了解距离 11:45:00 有多近。
让我提出以下采用多个十六进制数字的映射
根据用户输入或视觉选择,创建适当的模式,以及
开始搜索它。
nnoremap <silent> <expr> <leader>x/ SearchHexBytes('/', 0)
nnoremap <silent> <expr> <leader>x? SearchHexBytes('?', 0)
vnoremap <silent> <leader>x/ :call SearchHexBytes('/', 1)<cr>/<cr>
vnoremap <silent> <leader>x? :call SearchHexBytes('?', 1)<cr>?<cr>
function! SearchHexBytes(dir, vis)
if a:vis
let [qr, qt] = [getreg('"'), getregtype('"')]
norm! gvy
let s = @"
call setreg('"', qr, qt)
else
call inputsave()
let s = input(a:dir)
call inputrestore()
endif
if s =~ "[^ \t0-9A-Fa-f]"
echohl Error | echomsg 'Invalid hex digits' | echohl None
return
endif
let @/ = join(split(s, '\s\+'), '\%(\s*\|\n0x\x\+:\s*\)')
return a:dir . "\r"
endfunction
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)