-1

我有一个函数,它需要一个大小为 2kB 的缓冲区并将某些内容加载到其中。我可以假设该功能正常工作,但我无法对其进行测试。

函数原型是

int loadContent(unsigned long, char* buffer);

Unsigned long 是我要加载的块的数量(每个块的大小固定为 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条件有效,我只是担心?我可以像那样做'&'吗?

4

1 回答 1

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;
        }
}
于 2014-01-21T23:01:54.873 回答