读取char数组中的位

时间:2014-01-21 22:50:10

标签: c++ arrays bitvector

我有一个函数,它接受一个大小为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;'那样的?

1 个答案:

答案 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;
        }
}