У меня есть функция, которая принимает буфер размером 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 действительно? Могу ли я сделать операцию?&’ как это?
Вы должны изменить свой компаратор для каждого бита
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;
}
}
Других решений пока нет …