免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: andkylee
打印 上一主题 下一主题

请问如何以十六进制字符的形式搜索指定字符串的偏移位置? [复制链接]

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
11 [报告]
发表于 2011-06-28 20:47 |只看该作者
要不写个KMP算法吧

论坛徽章:
6
水瓶座
日期:2014-06-04 03:34:37水瓶座
日期:2014-06-17 13:20:31数据库技术版块每日发帖之星
日期:2016-07-09 06:20:00数据库技术版块每日发帖之星
日期:2016-07-17 06:20:00数据库技术版块每日发帖之星
日期:2016-08-01 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
12 [报告]
发表于 2011-06-28 21:56 |只看该作者
本帖最后由 andkylee 于 2011-06-28 22:25 编辑

回复 10# jason680


    明天我上传一个二进制文件作为测试用吧。
我发帖子的目的是:在一个二进制文件中查找指定的十六进制字符串首次出现的位置。
比如:数据库中int类型数据用4个字节表示,整数1表示成十六进制串为:01000000,我就是想寻找十六进制数据01000000在二进制文件中首次出现的位置。
使用awk中搜索的时候,就怕速度有些慢。

论坛徽章:
6
水瓶座
日期:2014-06-04 03:34:37水瓶座
日期:2014-06-17 13:20:31数据库技术版块每日发帖之星
日期:2016-07-09 06:20:00数据库技术版块每日发帖之星
日期:2016-07-17 06:20:00数据库技术版块每日发帖之星
日期:2016-08-01 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
13 [报告]
发表于 2013-10-18 00:29 |只看该作者
本帖最后由 andkylee 于 2013-10-18 00:32 编辑

覆盖文件指定偏移位置处的数据:
  1. $ cat ./modify_datafile.sh
  2. #!/bin/bash
  3. # for Linux

  4. if [ $# == 0 ]; then
  5.         echo "usage:$0 Modified_Data FileName OffSet";
  6.         exit 1
  7. fi

  8. Modified_Data=$1
  9. filename=$2
  10. offset=$3

  11. Modified_Data=`echo $Modified_Data|awk '{print toupper($0)}'`

  12. HexStr=""
  13. i=0
  14. Pos=0
  15. Pos=`expr $i \* 2 + 1`
  16. while [ $Pos -lt ${#Modified_Data} ]
  17. do
  18.   HexValue=`expr substr $Modified_Data $Pos 2`
  19.   OctValue=`echo -e "ibase=16\nobase=8\n$HexValue"|bc`
  20.   i=`expr $i + 1`
  21.   Pos=`expr $i \* 2 + 1`
  22.   HexStr=$HexStr"\0"$OctValue
  23. done
  24. HexStr=$HexStr"\c"

  25. #echo "bin/echo -e \"$HexStr\" |dd bs=1 seek=$offset of=$filename conv=notrunc"
  26. /bin/echo -e "$HexStr" |dd bs=1 seek=$offset of=$filename conv=notrunc >/dev/null 2>&1
复制代码
测试效果:

  1. [root@myxen ~]# echo "1234567890">test.txt
  2. [root@myxen ~]# ./modify_datafile.sh "414243" test.txt 3
  3. [root@myxen ~]# cat test.txt
  4. 123ABC7890
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP