如何在一个字节数组中连续查找一个字节数组?

大卫·菲尔德

我试图在一个字节数组中连续查找一个字节数组(byte []),并且发现了一个仅找到第一个匹配项的代码。

在这里找到代码: 在另一个数组中找到一个数组(byte [])?

问题:如何使用下面的代码连续查找字节数组?

        public int SearchBytes(byte[] haystack, byte[] needle)
    {
        int len = needle.Length;
        int limit = haystack.Length - len;
        for (int i = 0; i <= limit; i++)
        {
            int k = 0;
            for (; k < len; k++)
            {
                if (needle[k] != haystack[i + k]) break;
            }
            if (k == len) return i;
        }
        return -1;
    }
雅库布·马萨德(Yacoub Massad)

您可以像这样更改方法以接受起始索引:

public int SearchBytes(byte[] haystack, byte[] needle, int start_index)
{
    int len = needle.Length;
    int limit = haystack.Length - len;
    for (int i = start_index; i <= limit; i++)
    {
        int k = 0;
        for (; k < len; k++)
        {
            if (needle[k] != haystack[i + k]) break;
        }
        if (k == len) return i;
    }
    return -1;
}

区别仅在于此方法接受astart_index并在此特定索引处开始搜索。

现在,您可以像这样使用它:

byte[] haystack = new byte[] { 1, 2, 3, 4, 5, 1, 2, 3 };

byte[] needle = new byte[] {1,2,3};

int index = 0;

while (true)
{
    index = SearchBytes(haystack, needle, index);

    if (index == -1)
        break;

    Console.WriteLine("Found at " + index);

    index += needle.Length;
}

该循环从索引0开始,然后使用上一次搜索的结果来设置新索引以开始下一个搜索。

它添加needle.Length到索引中,以便我们在先前找到的结果结束后立即开始搜索。

更新:

可以使用以下代码创建一个将索引作为数组返回的方法:

public int[] SearchBytesMultiple(byte[] haystack, byte[] needle)
{
    int index = 0;

    List<int> results = new List<int>();

    while (true)
    {
        index = SearchBytes(haystack, needle, index);

        if (index == -1)
            break;

        results.Add(index);

        index += needle.Length;
    }

    return results.ToArray();
}

可以这样使用:

byte[] haystack = new byte[] { 1, 2, 3, 4, 5, 1, 2, 3 };

byte[] needle = new byte[] {1,2,3};

int[] indexes = SearchBytesMultiple(haystack, needle);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在另一个字节数组中查找一个字节数组的indexOf

来自分类Dev

将3个独立的字节数组合并为一个字节数组

来自分类Dev

文件下载一个字节数组作为javascript / Extjs中的文件

来自分类Dev

如何使用字节缓冲区表示一个字节数组中的数据?

来自分类Dev

将字节从字节数组复制到C#中另一个字节数组的特定位置

来自分类Dev

将字节从字节数组复制到C#中另一个字节数组的特定位置

来自分类Dev

创建一个字节数组并获得相同的Java和JavaScript输出

来自分类Dev

将字节数组复制到C#中的另一个字节数组

来自分类Dev

字节数组复制到C#中的另一个字节数组

来自分类Dev

如何在Java中将一个字符串或多个字符串转换为字节数组中的不同范围?

来自分类Dev

在Python 3中,当我索引一个字节数组时会发生什么?

来自分类Dev

在Python 3中,当我索引一个字节数组时会发生什么?

来自分类Dev

在特定位置java将字节数组添加到另一个字节数组

来自分类Dev

Android BLE:编写缺少最后一个字节数组的> 20字节特征

来自分类Dev

为什么我在文件中又报告了一个字节数?

来自分类Dev

将字节数组保存到SQL Server中的VarBinary列中只能插入一个字节

来自分类Dev

将字节数组保存到SQL Server中的VarBinary列中只能插入一个字节

来自分类Dev

将2个字节从字节数组转换为一个整数

来自分类Dev

从字节数组(缓冲区)的一个字节中提取位的最简单方法是什么?

来自分类Dev

RxJava:将整个字节数组合并为一个数组

来自分类Dev

从字节数组转换为字符串并与另一个字符串进行比较(java)

来自分类Dev

转换字节数组转换成十六进制字符串分隔符?删除一个字符串显示最后一个字符?

来自分类Dev

C#-我可以使用数组初始化程序从另一个数组构造一个字节数组吗?

来自分类Dev

C#解码器如何知道一个字符应使用的确切字节数?

来自分类Dev

如何从Java中的字节数组中删除前4个字节?

来自分类Dev

如何构造一个包含多个数据类型值的字节数组?

来自分类Dev

如何创建一个包含真实图像的字节数组?

来自分类Dev

如何创建一个“对齐的”字节数组并从中读取?

来自分类Dev

如何说服AVR-GCC全局字节数组的内存位置是一个常量

Related 相关文章

  1. 1

    在另一个字节数组中查找一个字节数组的indexOf

  2. 2

    将3个独立的字节数组合并为一个字节数组

  3. 3

    文件下载一个字节数组作为javascript / Extjs中的文件

  4. 4

    如何使用字节缓冲区表示一个字节数组中的数据?

  5. 5

    将字节从字节数组复制到C#中另一个字节数组的特定位置

  6. 6

    将字节从字节数组复制到C#中另一个字节数组的特定位置

  7. 7

    创建一个字节数组并获得相同的Java和JavaScript输出

  8. 8

    将字节数组复制到C#中的另一个字节数组

  9. 9

    字节数组复制到C#中的另一个字节数组

  10. 10

    如何在Java中将一个字符串或多个字符串转换为字节数组中的不同范围?

  11. 11

    在Python 3中,当我索引一个字节数组时会发生什么?

  12. 12

    在Python 3中,当我索引一个字节数组时会发生什么?

  13. 13

    在特定位置java将字节数组添加到另一个字节数组

  14. 14

    Android BLE:编写缺少最后一个字节数组的> 20字节特征

  15. 15

    为什么我在文件中又报告了一个字节数?

  16. 16

    将字节数组保存到SQL Server中的VarBinary列中只能插入一个字节

  17. 17

    将字节数组保存到SQL Server中的VarBinary列中只能插入一个字节

  18. 18

    将2个字节从字节数组转换为一个整数

  19. 19

    从字节数组(缓冲区)的一个字节中提取位的最简单方法是什么?

  20. 20

    RxJava:将整个字节数组合并为一个数组

  21. 21

    从字节数组转换为字符串并与另一个字符串进行比较(java)

  22. 22

    转换字节数组转换成十六进制字符串分隔符?删除一个字符串显示最后一个字符?

  23. 23

    C#-我可以使用数组初始化程序从另一个数组构造一个字节数组吗?

  24. 24

    C#解码器如何知道一个字符应使用的确切字节数?

  25. 25

    如何从Java中的字节数组中删除前4个字节?

  26. 26

    如何构造一个包含多个数据类型值的字节数组?

  27. 27

    如何创建一个包含真实图像的字节数组?

  28. 28

    如何创建一个“对齐的”字节数组并从中读取?

  29. 29

    如何说服AVR-GCC全局字节数组的内存位置是一个常量

热门标签

归档