Saturday, May 30, 2009

Find content of a byte array inside other byte array

// Find content of a byte array inside other byte array

// --------
// Method 1
// --------
public static int IndexOf(byte[] array, byte[] pattern)
{
bool found = false;

if (pattern.Length > array.Length)
return -1;

int i, j;

for (i = 0, j = 0; i < array.Length;)
{
if (array[i++] != pattern[j++])
{
j = 0;
continue;
}

if (j == pattern.Length)
{
found = true;
break;
}
}

if (!found)
return -1;
else
return i - pattern.Length;
}



// --------
// Method 2
// --------
private int IndexOf(byte[] array, byte[] pattern)
{
if ((array != null) && (array != null))
{
if (pattern.Length > array.Length) return 0;
for (int i = 0; i < array.Length; i++)
{
int startIndex = i;
bool match = true;
for (int j = 0; j < pattern.Length; j++)
{
if (array[startIndex] != pattern[j])
{
match = false;
break;
}
else if (startIndex < array.Length)
startIndex++;

}
if (match)
return startIndex - pattern.Length;
}
}
return -1;
}
}