Читать биты из массива символов

У меня есть функция, которая принимает буфер размером 2 КБ и загружает в него определенный контент.
Я могу предположить, что функция работает должным образом, но я не могу проверить это.

Прототип функции

int loadContent(unsigned long, char* buffer);

Длинный без знака — это номер блока, который я хочу загрузить (размер устанавливается равным 2 КБ для каждого блока), а в буфере загружается содержимое.

Теперь мне нужно перебирать бит в буфере и находить первый бит, равный 1.

Чтобы убедиться, что размер буфера составляет 2 КБ, я сделал переменную

char buffer[2048];

Но как мне перебирать побитовый массив символов?

Будет ли что-то подобное хорошо?

unsigned long getFreeCluster(){
char helpbuffer[2048];
partition->readCluster(0, helpbuffer);
unsigned long comparator = 1;
unsigned long position = 0;

for(int i = 0; i<16384; i++){
if((cluster & comparator) == 1){ position = i; break; }
}

return position;
}

В основном, я просто беспокоюсь, если условие if действительно? Могу ли я сделать операцию?&’ как это?

-1

Решение

Вы должны изменить свой компаратор для каждого бита

unsigned long getFreeCluster()
{
...
bool found = false;
for (int i = 0; !found && (i < 2048); ++i)
for (int b = 0; b < 8; ++b)
if (cluster[i] & (1 << b) != 0)
{
position = i * 8 + b;
found = true;
break;
}
}

Если вы ищете только первый бит = 1, это может быть быстрее:

unsigned long getFreeCluster()
{
...
bool found = false;
for (int i = 0; !found && (i < 2048); ++i)
if (cluster[i] != 0)
for (int b = 0; b < 8; ++b)
if (cluster[i] & (1 << b) != 0)
{
position = i * 8 + b;
break;
}
}
1

Другие решения

Других решений пока нет …