【问题标题】:Finding a byte array in C#在 C# 中查找字节数组
【发布时间】:2011-12-20 21:58:09
【问题描述】:

我想知道从 C# 中的另一个字节数组中查找子数组索引的最佳方法是什么。例如,如果我有以下作为我的主要数组。

byte[] inputArray = {0xFF,0xDD,0xA,0xF,0x1,0x2,0x78,0x05,0x00,0x01};
byte[] tobeFound = {0x78,0x05};

现在我想在 inputArray 中找到字节数组“tobeFound”。我应该得到索引 6。这是一个简短的例子。两个数组都可以很大。

那我应该去做什么? LINQ,Array.IndexOf ??我也需要有好的表现。

感谢您的任何指点和分享一些经验!

【问题讨论】:

  • 为什么不编写一个小控制台应用程序,对各种解决方案进行性能测试,看看哪一个表现最好
  • 你可以和stackoverflow.com/questions/4190533/…做几乎一样的事情
  • @Mark,我使用字节,而不是字符串
  • @Jason,如果有人这样做了,可能会在我编写代码之前为我提供一些有关速度的信息。这就是为什么我要求分享一些经验。
  • @Wajih:Dude..a 字符串是一个字符数组。在我给你的例子中用 byte[] 替换字符串,它会起作用。我以为你会把它拼凑起来。

标签: c# arrays indexing


【解决方案1】:

您可以使用经过充分测试的Boyer-Moore string search algorithm,因为您实际上是在搜索字符串(字节可以被视为字符)。

这似乎是 a decent implementation of Boyer-Moore in C# 的字符串(以及涡轮增压器 Boyer-Moore 和另一个我从未听说过的)。将这些转换为使用 Byte[] 应该很简单。

【讨论】:

  • 好吧,我实际上不是在搜索字符串,我仅限于字节。
  • 本质是一样的:字符串只是一个字节序列。该算法同样适用于字节数组。
  • @codekaizen:这是一个很酷的算法!永远不会想到这一点。
猜你喜欢
  • 2016-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-01
  • 2019-11-17
  • 2014-01-10
  • 2014-02-15
相关资源
最近更新 更多