C++ 将布尔列表转换为_int64

C++ 将布尔列表转换为_int64,c++,list,boolean,C++,List,Boolean,我有一个布尔列表,我正试图将其转换为一个整数64。布尔列表是由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永远不会变大,但我得到的输

我有一个布尔列表,我正试图将其转换为一个整数64。布尔列表是由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。它包含随机数。不太确定这样做的最佳方式。提前谢谢

我想举个例子,这里有一个: 清单包括:

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

当我运行该循环时,x=-38307363277776896713


如果不清楚,我希望x包含01101000001110010110001101100011111。

如果要通过乘以10来移动循环中的下一个基数-10位,则应通过乘以2来移动到下一位

您的奇数结果可能是由于溢出,再加上您将其显示为以10为基数的数字而不是二进制数字

如果您的意图是将每一个10进制数字用作0或1,那么您只能以这种方式保存19位

  • 左移
  • 相应地切换最后一位
  • 例如:

    for(auto-citer=binList.begin();citer!=binList.end();citer++){
    
    x只需在布尔数组中迭代,并打开在布尔数组中找到的
    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;
    }
    
    #包括
    使用名称空间std;
    int转换位(int N,int pos)
    {
    
    返回N=N |(1您没有向我们展示足够的相关代码来确定问题是什么。请努力将您的问题代码减少到a,并将其包含在您的帖子中。或者第二行可以是
    x+=*citer;
    #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;
    }