char数组的布尔数为64位整数

时间:2013-02-05 13:33:53

标签: c++

我有一个字符数组(比如char charr [5]),它包含0/1(布尔数字的char数组)。现在,我想将字符数组转换为64位整数(如果数组是{0,0,0,1,0},它将给出2)。怎么做 ?有没有库函数?

3 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分: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;
}

答案 2 :(得分:0)

尝试使用基数2的strtoll

int val = strtoll(input, NULL, 2);