C# 内存操作 byte[]数组 模糊查询 定位 求思路和解决方案

pjy612 2013-03-25 06:28:46
求助各位算法大神啊。
尝试过 循环套循环 和 转换成 字符串 形式的 hex 匹配 但是 效率一直上不去。
所以来csdn 求助各位算法大神了。
byte[]的长度 可能达到 20W。


需求 对 byte 数组 进行模糊定位。
举例
读取内存区域后 得到 byte[]
需要在该 byte[]中 模糊查询 并定位。


byte[] byts = new byte[]
{ 0, 0, 1, 2, 3, 1, 5, 1, 4, 2, 0, 0, 7, 1, 7, 2, 9, 6, 1, 7, 5, 8, 1, 9, 2 ,0 };

对应下标:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

提供一个字符串 "01 ?? 02" 找到 地址数组 int { 2 , 7 , 13 , 22 }
提供一个字符串 "?? ?? 02" 找到 地址数组 int { 1, 7, 13 }
提供一个字符串 "05 ?? ?? ?? ?? 00" 找到 地址数组 int { 6, 20 }
提供一个字符串 "05 ?? ?? 09 ?? 00" 找到 地址数组 int { 20 }

找寻 所有 匹配的地址 , 而且 还要高效。

...全文
399 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
pjy612 2013-03-26
  • 打赏
  • 举报
回复
引用 4 楼 gxingmin 的回复:
?? 代表什么意思?
为什么“05 ?? ?? ?? ?? 00”能查到6和20,而 "05 ?? ?? 09 ?? 00" 只能是20?


因为 中间多了个 09 所以 09 必须匹配到 byte 中的 9

05 ?? ?? ?? ?? 00
匹配
5, 1, 4, 2, 0, 0
5, 8, 1, 9, 2 ,0

05 ?? ?? 09 ?? 00
只能匹配
5, 8, 1, 9, 2 ,0
pjy612 2013-03-26
  • 打赏
  • 举报
回复
引用 5 楼 tiana0 的回复:
匹配规则看不懂啊



?? 表示任意字符 可以理解成 通配符 忽视掉的意思。。。

01 ?? 02
符合条件
01 01 02
01 22 02
01 78 02
pjy612 2013-03-26
  • 打赏
  • 举报
回复
引用 4 楼 gxingmin 的回复:
?? 代表什么意思? 为什么“05 ?? ?? ?? ?? 00”能查到6和20,而 "05 ?? ?? 09 ?? 00" 只能是20?
?? 表示任意字符 可以理解成 通配符 忽视掉的意思。。。
SUN_DRAGON 2013-03-26
  • 打赏
  • 举报
回复
?代表的是任意字符的匹配吧。 KMP算法不是精确匹配吗?
大腹 2013-03-26
  • 打赏
  • 举报
回复
大腹 2013-03-26
  • 打赏
  • 举报
回复
试一下KMP算法
  • 打赏
  • 举报
回复
有什么规律吗???没看出来。没规则怎么匹配?
三五月儿 2013-03-26
  • 打赏
  • 举报
回复
匹配规则看不懂啊
gxingmin 2013-03-26
  • 打赏
  • 举报
回复
?? 代表什么意思? 为什么“05 ?? ?? ?? ?? 00”能查到6和20,而 "05 ?? ?? 09 ?? 00" 只能是20?
pjy612 2013-03-26
  • 打赏
  • 举报
回复
>.< 没人教教咱么?
pjy612 2013-03-25
  • 打赏
  • 举报
回复
别沉了 顶一下!
pjy612 2013-03-25
  • 打赏
  • 举报
回复
自己顶起一下!

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧