1

0/1(ブール値のchar配列)を含む文字配列(たとえばchar charr [5])があります。ここで、文字配列を64ビット整数に変換します(配列が{0、0、0、1、0}の場合、2になります)。どうやってするか ?ライブラリ関数はありますか?

4

3 に答える 3

3

いいえ、そのための標準機能はありません。しかし、それはかなり些細なことです。

uint64_t pack(const uint8_t *bits, size_t n)
{
  uint64_t x = 0, value = 1 << (n - 1);

  while(n > 0)
  {
    x += value * *bits++;
    n--;
    value /= 2;
  }
  return x;
}
于 2013-02-05T13:36:03.247 に答える
1

Unwindには基本的な考え方がありますが、実装は複雑です。これも機能します:

uint64_t pack(const uint8_t *bits, size_t n)
{
  uint64 x = 0;
  for(;n > 0; n--) // For all input bits.
  {
    x <<= 1; // make room for next bit.
    assert(*bits <= 1); // It better be a 0 or 1.
    x += *bits++; // Add new bit on the end.
  }
  return x;
}
于 2013-02-05T16:51:13.757 に答える
0

ベース2でstrtollを試してください:

int val = strtoll(input, NULL, 2);
于 2013-02-05T13:37:42.600 に答える