Вот один из методов. Это требует только просмотра каждого 4-го байта, поэтому должно быть немного быстрее. (Если вы ищете 0x11223344, и вы нашли 0x55, вы знаете, что целое целое число не содержит этот байт вообще.) Должно быть O (n / 4).
Я не запускал это, возможно, есть синтаксические или отдельные ошибки.
bool Compare4(byte[] searchIn, int offset, byte[] searchFor)
{
return searchIn[offset] == searchFor[0] &&
searchIn[offset+1] == searchFor[1] &&
searchIn[offset+2] == searchFor[2] &&
searchIn[offset+3] == searchFor[3];
}
/// Returns index if found, -1 if not found.
int FindIntInArray(int target, byte[] array)
{
byte[] targetArray = new byte[4];
targetArray[0] = target & 0xFF;
targetArray[1] = (target>>8) & 0xFF;
targetArray[2] = (target>>16) & 0xFF;
targetArray[3] = (target>>24) & 0xFF;
bool[] bytesUsed = new bool[256];
foreach(byte b in targetArray) bytesUsed[b] = true;
for(int i = 3; i < array.Length - 3; i += 4)
{
if(bytesUsed[array[i]])
{
if(Compare4(array, i-3, targetArray)) return i-3;
if(Compare4(array, i-2, targetArray)) return i-2;
if(Compare4(array, i-1, targetArray)) return i-1;
if(Compare4(array, i, targetArray)) return i;
}
}
return -1;
}