亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
12下一頁(yè)
最近訪問(wèn)板塊 發(fā)新帖
查看: 10201 | 回復(fù): 12
打印 上一主題 下一主題

請(qǐng)問(wèn)如何以十六進(jìn)制字符的形式搜索指定字符串的偏移位置? [復(fù)制鏈接]

論壇徽章:
6
水瓶座
日期:2014-06-04 03:34:37水瓶座
日期:2014-06-17 13:20:31數(shù)據(jù)庫(kù)技術(shù)版塊每日發(fā)帖之星
日期:2016-07-09 06:20:00數(shù)據(jù)庫(kù)技術(shù)版塊每日發(fā)帖之星
日期:2016-07-17 06:20:00數(shù)據(jù)庫(kù)技術(shù)版塊每日發(fā)帖之星
日期:2016-08-01 06:20:00數(shù)據(jù)庫(kù)技術(shù)版塊每日發(fā)帖之星
日期:2016-08-04 06:20:00
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2011-06-27 10:43 |只看該作者 |倒序?yàn)g覽
本帖最后由 andkylee 于 2011-06-27 10:45 編輯

有個(gè)問(wèn)題,請(qǐng)教一下!
如何以十六進(jìn)制字符的形式搜索指定字符串的偏移位置?
比如:
一個(gè)二進(jìn)制文件:test_Hex.bin的內(nèi)容為:

andkylee@ubuntu:~$ hexdump -C test_Hex.bin
00000000  01 00 00 00 02 00 00 00  41 42 43 44 03 00 00 00  |........ABCD....|
00000010

該文件僅有16字節(jié)的內(nèi)容,紅色部分標(biāo)注。其中前0-3字節(jié)的01000000表示整數(shù)1,第4-7字節(jié)的02000000表示整數(shù)2,第8-11字節(jié)的41424344表示字符串ABCD,第12-15字節(jié)的03000000表示整數(shù)3.
字符串ABCD在文件test_Hex.bin中的偏移量為:8。請(qǐng)問(wèn)如何用shell判斷出來(lái)指定字符串ABCD在文件test_Hex.bin中的偏移量?

我研究過(guò)一些16進(jìn)制查看命令:hexdump,xxd,od,發(fā)現(xiàn)這些工具沒(méi)有搜索指定內(nèi)容的功能。我google到的文檔:
我使用過(guò)的Linux命令之hexdump - ”十六“進(jìn)制查看器

如何以十六進(jìn)制的形式讀unix平臺(tái)下的文件系統(tǒng)與裸設(shè)備文件

論壇徽章:
2
射手座
日期:2014-10-10 15:59:4715-16賽季CBA聯(lián)賽之上海
日期:2016-03-03 10:27:14
2 [報(bào)告]
發(fā)表于 2011-06-27 12:23 |只看該作者
回復(fù) 1# andkylee

供你參考:
  1. echo '00000000  01 00 00 00 02 00 00 00  41 42 43 44 03 00 00 00
  2. 00000000  01 00 00 00 02 00 00 00  41 42 43 44 03 00 00 00' |\
  3. while read line
  4. do
  5.    x=0
  6.    for i in `echo $line`
  7.    do
  8.       printf -v str "\x"$i
  9.       ((x++))
  10.       [ $str ] && [ $str = "A" ] && echo $((x-=2))
  11.    done
  12. done
  13. 8
  14. 8
復(fù)制代碼

論壇徽章:
6
水瓶座
日期:2014-06-04 03:34:37水瓶座
日期:2014-06-17 13:20:31數(shù)據(jù)庫(kù)技術(shù)版塊每日發(fā)帖之星
日期:2016-07-09 06:20:00數(shù)據(jù)庫(kù)技術(shù)版塊每日發(fā)帖之星
日期:2016-07-17 06:20:00數(shù)據(jù)庫(kù)技術(shù)版塊每日發(fā)帖之星
日期:2016-08-01 06:20:00數(shù)據(jù)庫(kù)技術(shù)版塊每日發(fā)帖之星
日期:2016-08-04 06:20:00
3 [報(bào)告]
發(fā)表于 2011-06-27 14:51 |只看該作者
本帖最后由 andkylee 于 2011-06-27 14:53 編輯

回復(fù) 2# yinyuemi


    謝謝你的回復(fù)。

你的代碼中循環(huán)遇到A就返回偏移位置而沒(méi)有繼續(xù)判斷后面是否匹配BCD這三個(gè)字母。

抱歉,可能我沒(méi)有說(shuō)清楚文件test_Hex.bin的具體內(nèi)容。

文件test_Hex.bin的內(nèi)容:
01000000020000004142434403000000
以十六進(jìn)制形式顯示,16個(gè)字節(jié)。

論壇徽章:
145
技術(shù)圖書徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11獅子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龍
日期:2014-01-08 15:26:12技術(shù)圖書徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
4 [報(bào)告]
發(fā)表于 2011-06-27 15:31 |只看該作者
回復(fù)  yinyuemi


    謝謝你的回復(fù)。

你的代碼中循環(huán)遇到A就返回偏移位置而沒(méi)有繼續(xù)判斷后面是否匹 ...
andkylee 發(fā)表于 2011-06-27 14:51



$ hexdump -C test_Hex.bin
00000000  01 00 00 00 02 00 00 00  41 42 43 44 03 00 00 00  |........ABCD....|
00000010

$ awk '{print index($0,"ABCD")}' test_Hex.bin
9

$ awk '{print index($0,"ABCD")-1}' test_Hex.bin
8

論壇徽章:
2
射手座
日期:2014-10-10 15:59:4715-16賽季CBA聯(lián)賽之上海
日期:2016-03-03 10:27:14
5 [報(bào)告]
發(fā)表于 2011-06-27 16:01 |只看該作者
回復(fù) 3# andkylee
  1. cat index.sh
  2. #!/bin/bash

  3. filename=$1
  4. cat $filename |while read line
  5. do
  6.         str=" "
  7.         for i in ${line:9}
  8.         do
  9.                 if [ $i -lt 41 ] && [ ${#i} -eq 2 ]
  10.                 then
  11.                         printf "\x0"$i
  12.                 else
  13.                         printf "\x"$i
  14.                 fi
  15.         done
  16.         printf "\n"
  17. done |\
  18. awk '{print (index($0,"ABCD")-1)/2}'

  19. chmod +x index.sh
  20. ./index.sh urfile
復(fù)制代碼

論壇徽章:
6
水瓶座
日期:2014-06-04 03:34:37水瓶座
日期:2014-06-17 13:20:31數(shù)據(jù)庫(kù)技術(shù)版塊每日發(fā)帖之星
日期:2016-07-09 06:20:00數(shù)據(jù)庫(kù)技術(shù)版塊每日發(fā)帖之星
日期:2016-07-17 06:20:00數(shù)據(jù)庫(kù)技術(shù)版塊每日發(fā)帖之星
日期:2016-08-01 06:20:00數(shù)據(jù)庫(kù)技術(shù)版塊每日發(fā)帖之星
日期:2016-08-04 06:20:00
6 [報(bào)告]
發(fā)表于 2011-06-27 17:22 |只看該作者
回復(fù) 4# jason680


    謝謝你的回復(fù)。
使用awk好像有些問(wèn)題,awk是用換行\(zhòng)x0a作為記錄的分割的。實(shí)際上,二進(jìn)制文件中的字符\0xoa不一定表示換行的意思。
比如文件test_Hex.bin的內(nèi)容變成:
010000000a0000004142434403000000

執(zhí)行:awk '{print index($0,"ABCD")-1}' test_Hex.bin
會(huì)返回2條記錄:
-1
3

論壇徽章:
145
技術(shù)圖書徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11獅子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龍
日期:2014-01-08 15:26:12技術(shù)圖書徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
7 [報(bào)告]
發(fā)表于 2011-06-27 17:26 |只看該作者
本帖最后由 jason680 于 2011-06-27 17:52 編輯
回復(fù)  jason680


    謝謝你的回復(fù)。
使用awk好像有些問(wèn)題,awk是用換行\(zhòng)x0a作為記錄的分割的。實(shí)際上 ...
andkylee 發(fā)表于 2011-06-27 17:22


給真正的數(shù)值,才會(huì)有真正解答吧....

$ hexdump -C test_Hex.bin
00000000  01 00 00 00 0a 00 00 00  41 42 43 44 03 00 00 00  |........ABCD....|
00000010

$ awk '{n=index($0,"ABCD");if(n)print t+n-1;else t=t+length($0)+1}' test_Hex.bin
8

論壇徽章:
6
水瓶座
日期:2014-06-04 03:34:37水瓶座
日期:2014-06-17 13:20:31數(shù)據(jù)庫(kù)技術(shù)版塊每日發(fā)帖之星
日期:2016-07-09 06:20:00數(shù)據(jù)庫(kù)技術(shù)版塊每日發(fā)帖之星
日期:2016-07-17 06:20:00數(shù)據(jù)庫(kù)技術(shù)版塊每日發(fā)帖之星
日期:2016-08-01 06:20:00數(shù)據(jù)庫(kù)技術(shù)版塊每日發(fā)帖之星
日期:2016-08-04 06:20:00
8 [報(bào)告]
發(fā)表于 2011-06-28 11:18 |只看該作者
回復(fù) 5# yinyuemi


    謝謝您的回復(fù)。 你這個(gè)方法不行啊。 返回-0.5

論壇徽章:
6
水瓶座
日期:2014-06-04 03:34:37水瓶座
日期:2014-06-17 13:20:31數(shù)據(jù)庫(kù)技術(shù)版塊每日發(fā)帖之星
日期:2016-07-09 06:20:00數(shù)據(jù)庫(kù)技術(shù)版塊每日發(fā)帖之星
日期:2016-07-17 06:20:00數(shù)據(jù)庫(kù)技術(shù)版塊每日發(fā)帖之星
日期:2016-08-01 06:20:00數(shù)據(jù)庫(kù)技術(shù)版塊每日發(fā)帖之星
日期:2016-08-04 06:20:00
9 [報(bào)告]
發(fā)表于 2011-06-28 11:41 |只看該作者
回復(fù) 7# jason680


    謝謝。你這個(gè)方法可以。
在awk內(nèi)index函數(shù)也可以顯示"\x41\x42\x43\x44"表示“ABCD”。
awk '{n=index($0,"\x41\x42\x43\x44");if(n)print t+n-1;else t=t+length($0)+1}' test_Hex.bin 這條命令也是可以的。

但是,發(fā)現(xiàn)兩個(gè)問(wèn)題,awk內(nèi)的index只返回該行匹配的第一個(gè)位置;
返回的第二個(gè)匹配的位置是錯(cuò)誤的(因?yàn)榍耙粋(gè)匹配后沒(méi)有給t賦值)。

例子:
  1. # awk '{n=index($0,"\x00\x00");if(n)print t+n-1;else t=t+length($0)+1}' test_Hex.bin
  2. 1
  3. 0
復(fù)制代碼
另外,我感覺(jué)二進(jìn)制文件一般不是用\x0a作為行分割的,或者說(shuō)二進(jìn)制文件就沒(méi)有換行的概念。
我用上面的命令處理一個(gè)200M的數(shù)據(jù)文件時(shí)速度不是很快。

論壇徽章:
145
技術(shù)圖書徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11獅子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龍
日期:2014-01-08 15:26:12技術(shù)圖書徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
10 [報(bào)告]
發(fā)表于 2011-06-28 12:05 |只看該作者
想起某人說(shuō)的一句話: 有完整的問(wèn)題,才會(huì)得到完整的答案....
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP