В C / C ++ вы можете сделать это O(n)
с указателем на буфер и приведением к 32-битному типу данных, но в C# с учетом byte[]
или IEnumerable<byte>
и int32
, как вы могли бы эффективно найти первая позиция DWORD в байтовом буфере, в идеале с использованием встроенных методов библиотеки?
Я не хочу рисковать небезопасным кодом, поэтому я могу, конечно, искать 4-элементный байтовый суббуфер. Но есть ли более удобный способ использовать мое значение поиска длиной 32 бита?
Тривиальная обработка (псевдо-i sh):
int Find(IEnumerable<byte> buf, int val)
{
byte d = val & 0xff, c = (val >>8) & 0xff, b = (val >>16) & 0xff, a = (val>>24) & 0xff;
for(int i=0;i<buf.Length - 3;++i)
{
if(buf[i] == d && buf[i+1] == c && buf[i+2] == b && buf[i+3] == a)
return i
}
return -1;
}
Интересно, смогу ли я объединить все 4 побайтных проверки с одной 32-разрядной проверкой.