-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条件が有効かどうか悩んでいますか?op '&' をそのように実行できますか?

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 に答える