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

C++ 在将十进制数转换为二进制数时遇到问题,c++,arrays,visual-c++,binary,decimal,C++,Arrays,Visual C++,Binary,Decimal,我正在制作一个程序,将用户输入的字符串(如“APPLE”)转换为二进制数,通过对应的ASCII数字表示字符串“APPLE”的每个字符。例如ASCII中的a=65等。。我创建了一个将字符串转换为二进制的函数,但它似乎不起作用。它在无限循环中显示“等效二进制数为:0031F240for A”,并给出“0031F240for”,而不是二进制版本的65。我知道这个函数可以将十进制数转换成二进制数,因为我已经尝试过了,但我认为我的bin[]数组实现把事情搞砸了。任何帮助都将不胜感激 #include &l

我正在制作一个程序,将用户输入的字符串(如“APPLE”)转换为二进制数,通过对应的ASCII数字表示字符串“APPLE”的每个字符。例如ASCII中的a=65等。。我创建了一个将字符串转换为二进制的函数,但它似乎不起作用。它在无限循环中显示“等效二进制数为:0031F240for 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()
{
}


};
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
类随机字符串
{
私人:
字符串输入;
串仓[100];
公众:
RandomString():bin(),输入(“”)
{
}
void getData()
{
cout>输入;
}
void numToBin()
{
int i=0;
int len=input.length();
int num=int(输入[i]);
对于(int i=0;iwhile(int(输入[i])!=0)
{
如果(数值%2==0)
bin[i]。插入(0,“0”);
其他的
{
bin[i]。插入(0,“1”);
}
num=num/2;//这两种情况下都应该是这一行。
cout
while(int(输入[i])!=0)
{
如果(数值%2==0)
bin[i]。插入(0,“0”);
其他的
{
bin[i]。插入(0,“1”);
}
num=num/2;//这两种情况下都应该是这一行。

cout我还没有测试结果是否正确,但是这段代码将字符串转换为二进制。可能您必须修改它以适应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,""));  
}

第二,执行std::cout我还没有测试结果是否正确,但是这段代码将字符串转换为二进制。可能您必须修改它以适应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,""));  
}

第二,在执行std::cout时,您可能需要更改中的“bin”


cout您可能需要更改中的“bin”



我想我们是否需要在这两种情况下都使用`num=num/2;`我错了吗?是的,你是对的。在这两种情况下都应该这样做,这是我的错误。但是,它最终还是会吐出与输出相同的东西。我不明白bin的类型。如果使用
string
则使用
string str=“”;
对于条件
str=str+(num%2==0?“0”:“1”);
我必须为我的bin使用一个字符串类型的数组,因为如果用户输入另一个不同长度的单词,例如菠萝,那么我需要它将菠萝的所有字符转换为二进制。我已经编辑了我的帖子,以包含我的所有代码。你可以参考这个:我认为我们需要在这两种情况下都使用'num=num/2;`我是对的吗ng?是的,你是对的。在这两种情况下都应该是这样,这是我的错误。但是,它最终还是会吐出与输出相同的东西。我不明白箱子的类型是什么。如果使用
string
,则使用
string str=“”;
和条件
str=str+(num%2==0?:“1”);
我必须为我的bin使用一个字符串类型的数组,因为如果用户输入另一个不同长度的单词,例如菠萝,那么我需要它将菠萝的所有字符转换为二进制。我编辑了我的帖子,以包含我的所有代码。你可以参考:是的,你是对的。这两种情况下都应该是,这是我的错误。但是,它最终还是会吐出与输出相同的东西。是的,你是对的。这两种情况下都应该是这样,这是我的错误。但是,它最终还是会吐出与输出相同的东西。嗨,谢谢你发布代码,但我知道如何使用vector什么的。如果你能帮我点一下,我将不胜感激我不知道我的代码有什么问题。@user2419691输入的是什么类型的字符串?你能发布你所有的代码吗?是的,它是一个类型字符串。我已经编辑了我的原始帖子以包含我所有的代码。虽然你从未停止过,但你必须使用break,但无论如何我认为你的函数的结果是不正确的。另外,做
std::cout好的,我修复了我的
cout Hi,谢谢你发布你的代码,但我知道如何使用vector,还有什么没有…如果你能帮我指出我的代码有什么问题,我将不胜感激。@user2419691输入是什么类型的,string?你能发布你所有的代码吗?是的,它是一个类型字符串。我已经编辑了我的原始帖子以包含我所有的代码。你的while从来没有最重要的是,你必须使用break,但无论如何,我认为你函数的结果是不正确的。同样做
std::cout好的,我修复了我的
cout,感谢你的输入。有人指出后我看到了我的错误,并立即这样做。我有我的代码来打印A的二进制,但它不会打印其余单词的二进制。我t最终打印出“等效二进制数为:P”等,一直打印到字符串的最后一个字符。感谢您的输入。在有人指出后,我看到了我的错误,并立即执行了该操作。我有代码打印出A的二进制,但它不会打印出其余单词的二进制。它最终打印出来“等效二进制数为:P”等,一直到字符串的最后一个字符。
   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;
        }
    }
}