C++ 在将十进制数转换为二进制数时遇到问题
我正在制作一个程序,将用户输入的字符串(如“APPLE”)转换为二进制数,通过对应的ASCII数字表示字符串“APPLE”的每个字符。例如ASCII中的a=65等。。我创建了一个将字符串转换为二进制的函数,但它似乎不起作用。它在无限循环中显示“等效二进制数为:0031F240for A”,并给出“0031F240for”,而不是二进制版本的65。我知道这个函数可以将十进制数转换成二进制数,因为我已经尝试过了,但我认为我的bin[]数组实现把事情搞砸了。任何帮助都将不胜感激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
#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;//这两种情况下都应该是这一行。
coutwhile(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;
}
}
}