Если вы рассматриваете весь массив как одну битовую строку:
0xAB, 0x7B, 0xF0, 0xEA, 0x04, 0x2E, 0xF3, 0xA9 is then:
10101011 01111011 11110000 11101010 00000100 00101110 11110011 10101001
==== ==== ====
==== ==== ====
1010 встречается 6 раз.
Если вы не пытаетесь сопоставить границы байтов, вы можете попробовать что-то вроде следующего (протестировано в Perl и переведено вручную):
int counter = 0;
for (int i = 0; i < array.length; ++i)
{
for (int bits = 0xA0, mask = 0xF0; bits >= 0x0A; bits >>= 1, mask >>= 1)
{
if ((array[i] & mask) == bits)
++counter;
}
}
Чтобы соответствовать границам байтов, вы должны сдвинуть биты со следующего байта. Попробуйте что-то вроде этого (проверено на Perl и переведено вручную):
int counter = 0;
byte tester = array[0];
for (int i = 1; i < array.length + 1; ++i)
{
byte nextByte = i < array.length ? array[i] : 0;
for (int bit = 0; bit < 8; ++bit)
{
if ((tester & 0xF0) == 0xA0)
++counter;
tester <<= 1;
if ((nextByte & 0x80) != 0)
tester |= 1;
nextByte <<= 1;
}
}
Обе программы считают 6, поскольку в этом примере нет 1010 последовательностей через границы байтов.