我有一个函数,它接受一个大小为2kB的缓冲区并向其加载某些内容。 我可以假设该功能正常工作,但我无法测试它。
函数原型是
int loadContent(unsigned long, char* buffer);
无符号长整数是我想要加载的块的编号(每个块的大小固定为2kB),缓冲区是内容的加载位置。
现在我必须在缓冲区中逐位迭代并找到等于1的第一位。
为了确保缓冲区大小为2kB,我做了一个变量
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条件有效,我只会感到不安?我可以做op'&amp;'那样的?
答案 0 :(得分: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;
}
}