将bool列表转换为_int64

时间:2015-12-04 22:14:18

标签: c++ list boolean

我有一个bool列表,我正在尝试将其转换为一个_int64。 bools列表由8个字符的字符串创建,因此它永远不会超过64的长度。

我试过这样做:

我传递了一个const std :: list<布尔>& binList进入函数。

_int64 x = 0;
for(auto citer = binList.begin();citer!=binList.end();citer++{
    x*=10;
    if(*citer) x++;
}

这显然不起作用,因为如果有一个0的列表,int将永远不会变大,但我得到的输出甚至不包含1和0。它包含随机数。不太确定最好的方法。提前谢谢。

问一个例子,所以这里有一个: binList包含:

{0,1,1,0,1,0,0,0,0,1,1,0,0,1,0,1,1,0,0,0,1,1,0, 1,1,0,0,0,1,1,0,1,1,1,1,1}

当我通过该循环运行时,x = -3830736327776896713。

如果不清楚,我会像x一样包含01101000011001011000110110001101111。

3 个答案:

答案 0 :(得分:1)

您将通过乘以10转移到循环中的下一个基数为10的数字,您应该通过乘以2来转移到下一个

你的奇怪结果可能是由溢出造成的,再加上你将它显示为基数为10而不是二进制的事实。

如果您的意图是将每个基数为10的数字用作0或1,那么您将只能保持19位。

答案 1 :(得分:1)

  1. 向左移动
  2. 相应地切换最后一位。
  3. E.g:

    for(auto citer = binList.begin();citer!=binList.end();citer++){
        x <<= 1;
        if (*citer) x |= 1;
    }
    

    也许最好让int unsigned。

答案 2 :(得分:1)

只需遍历布尔数组并打开i'th位,找到布尔数组中的1

以下程序将布尔数组转换为单个64位整数。

#include<iostream>

using namespace std;

int turnOnBit(int N,int pos)
{
    return N=N | (1<<pos);
}

int main()
{
    bool ar[] = {0,1,1,0,1,0,0,0,0,1,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,0,0,0,1,1,0,1,1,1,1,1};
    __int64 x;
    for(int i = 0; i < sizeof(ar); i++)
    {
        if(ar[i])
            turnOnBit(x,i);
    }
    cout<<x<<endl;
    return 0;
}