将二进制向量转换为十进制数组

时间:2016-09-23 02:59:36

标签: c++ arrays vector binary decimal

我创建了一种生成随机二进制数的方法,其中n位数最多为256位。为了继续我的程序,我需要使用我的二进制值取向量并将其放入十进制数组,然后将该数字转换为int小数。这是以下函数,它创建随机二进制向量,并尝试转换为十进制。我无法将二进制向量转换为十进制数。

int random_binary(int n, int m){

   vector<int> binary;

   for(int i = 0; i < n; i++)
   {
      m = rand() % 2;

      binary.push_back(m);
   }

   binary.push_back(1);

   int j;

   for(j = 0; j < binary.size(); j++)
   {
       cout << binary[j];
   }
   cout <<"\n";


   int len = binary.size();
   int a = binary[len];   //having trouble right here

   int decimalValue = 0;

   for (int i = len-1; i>= 0; i--)
   {
       decimalValue = decimalValue + binary[i]*pow(2,len-i-1);
   }

   return decimalValue;
}

如果有人能够帮助解决这个问题,那将非常感激。

1 个答案:

答案 0 :(得分:0)

代码并不是那么糟糕,但确实存在一些问题:

  • int值在大多数平台上只能容纳32位,如果只想要非负值,则只能容纳31位。因此,对于256位二进制数字,您将需要使用其他内容。

  • int a = binary[len]; //having trouble right here - 我认为@PaulMcKenzie将此解释为尝试使用可变数量的元素(int a[len];)声明一个int数组。我认为这可能是int变量到binary中最后一个条目的元素。无论哪种方式都是错误的 - 但无论如何你永远不会使用a,我认为没有任何可能的用途。所以只需删除该行。

  • 不是错误,但您应该明白int decimalValue不是十进制,它是一个整数,很可能作为一组位存储在计算机内,并且只显示为小数转换后以特定方式显示的数字,例如使用std::cout打印时。

  • 在求和循环中,std::pow不应该用于整数值,但幸运的是,左移位运算符可用于获得2的整数幂:
    decimalValue = decimalValue + binary[i] * (1<<(len-i-1));