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

Converting a binary vector into a decimal array

本文关键字:十进制 数组 转换 二进制 向量      更新时间:2023-10-16

我创建了一个方法来生成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;
}

如果有人能帮我解决这个问题,我将不胜感激。

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

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

  • int a = binary[len]; //having trouble right here -我认为@PaulMcKenzie将这解释为试图声明一个具有可变数量元素的int数组(int a[len];)。我认为这可能是将int变量初始化为binary中最后一项后面的元素。无论哪种方式都是错误的——但是你从来没有使用过a,我也没有看到它有任何可能的用途。

  • 不是一个错误,但是你应该明白int decimalValue不是十进制,它是一个整数,它很可能作为一组位存储在计算机中,只有在转换和以某种方式显示时才显示为十进制数,就像使用std::cout打印时一样。

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