将十进制数转换为二进制数时遇到问题

时间:2013-05-27 07:34:24

标签: c++ arrays visual-c++ binary decimal

我正在创建一个程序,通过表示字符串“APPLE”的每个字符的相应ASCII数字将用户输入的字符串(如“APPLE”)转换为二进制数字。例如,在ascii等中A = 65 ..我已经创建了一个将字符串转换为二进制文件的函数,但它似乎不起作用。它在无限循环中显示“等效二进制数为:0031F240 for A”并给出“0031F240for”而不是65的二进制版本。我知道这个函数适用于将十进制数转换为二进制数,因为我已经尝试过,但我认为我的bin []数组的实现搞砸了。任何帮助将不胜感激。

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <string>
#include <fstream>
using namespace std;

class RandomString
{
    private:
        string input;
        string bin[100];

    public:

RandomString() : bin(), input("")
{

}

void getData()
{
    cout << "Enter the word to be encoded into a binary file.";
    cin >> input;
}

void numToBin()
{
    int i = 0;
    int len = input.length();
    int num = int(input[i]);
    for(int i = 0; i < len; i++)
    {

        while(num != 0)
        {
            if (num % 2 == 0)
                bin[i].insert(0, "0");
            else
                bin[i].insert(0, "1");

            num = num / 2;
            cout << "The equivalent binary number is: " << bin << "for " << input[i] << endl;
        }
    }
}
void display()
{
}


};

3 个答案:

答案 0 :(得分:1)

我没有测试结果是否正确但是此代码将字符串转换为二进制。可能你必须修改它以适应ASCII码。

void DecimalToBinary(char a,std::vector<char>& v)
{
  if(a==0)
      v.push_back(0);
  if(a==1)
      v.push_back(1);
  else
    {
      v.push_back(a%2);
      DecimalToBinary(a/2,v);
    }
}



int main()
{
  std::vector<char> v;
  std::string line;
  getline(std::cin,line);
  std::istringstream input(line);
  char c;
  while(input >> c)
    {
  DecimalToBinary(c,v);
    }

  std::copy(v.begin(),v.end(),std::ostream_iterator<int>(std::cout,""));  
}

首先你的while循环永远不会停止因为你没有在while循环中改变i的值,所以int(input[i])总是具有相同的值,你必须在某处使用breaki++,但我不知道结果是否正确,我认为递归比在这种情况下更好,但无论如何都要尝试以下方法:

   void numToBin()
{
    int i = 0;
    int len = input.length();
    int num = int(input[i]);
    for(int i = 0; i < len; i++)
    {

        while(int(input[i]) != 0)
        {
            if (num % 2 == 0)
          {
                bin[i].insert(0, "0");
        break;
          }
            else
            {
                bin[i].insert(0, "1");
                num = num / 2;
            }
            cout << "The equivalent binary number is: " << bin << "for " << input[i] << endl;
        }
    }
}

其次,执行std::cout << bin打印内存地址,而不是bin的内容。

答案 1 :(得分:0)

while(int(input[i]) != 0)
        {
            if (num % 2 == 0)
                bin[i].insert(0, "0");
            else
            {
                bin[i].insert(0, "1");

            }
            num = num / 2;// this line should be in both case.
            cout << "The equivalent binary number is: " << bin << "for " << input[i] << endl;
        }

我已经针对这两种情况更改了num = num / 2。请检查一下。

答案 2 :(得分:0)

您可能想要更改

中的“bin”
  

cout&lt;&lt; “等效的二进制数是:”&lt;&lt;仓

到'bin [i]'。

因为'bin'是一个字符串数组,也是字符串数组的指针/地址,所以'cout&lt;&lt; bin'将始终输出地址。