这是一个非常简单的问题;第一次海报和长时间的观察。
这是我写的二进制到十进制转换器:
#include <iostream>
#include <cmath>
using namespace std;
const int MAX = 6;
int conv(int z[MAX], int l[6], int MAX);
int main()
{
int zelda[MAX];
const int d = 6;
int link[d];
cout << "Enter a binary number: \n";
int i = 0;
while (i < MAX && (cin >> zelda[i]).get()) //input loop
{
++i;
}
cout << conv(zelda, link, MAX);
cin.get();
return 0;
}
int conv(int zelda[MAX], int link[6], int MAX)
{
int sum = 0;
for (int t = 0; t < MAX; t++)
{
long int h, i;
for (int h = 5, i = 0; h >= 0; --h, ++i)
if (zelda[t] == 1)
link[h] = pow(2.0, i);
else
link[h] = 0;
sum += link[t];
}
return sum;
}
通过输入循环的处理方式,我必须在每次输入数字后按Enter键。我还没有添加任何纠错(我的一些变量是模糊的),但想输入二进制说111111而不是1输入,1输入,1输入等填充数组。我对任何技术和其他建议持开放态度。也许将其输入为字符串并将其转换为int?
我会继续研究。谢谢。
答案 0 :(得分:2)
要读取数据see this related question(并按std::cin
替换文件流)。
要转换,您可以做一些简单的事情:
unsigned int convert(const std::string & s)
{
// maybe check that s.size() <= CHAR_BIT * sizeof(unsigned int)
unsigned int result = 0;
for (std::string::const_reverse_iterator rit = s.rbegin(), rend = s.rend(); rit != rend; ++rit)
{
result *= 2;
if (*rit == '1') ++result;
else if (*rit != '0') { /*error!*/ return -1; }
}
return result;
}
答案 1 :(得分:1)
你可以读取一个int并以这种方式解析它:
int number = 0;
cin >> number;
int i = 0;
while(i < MAX)
{
if(number > 0)
{
zelda[i] = number % 10; // or you can switch to zelda[MAX-(i+1)]
number = number/10;
else
{
zelda[i] = 0;
}
i++;
}
编辑:
请注意,此转换采用小端格式,这意味着如果键入int'100',则zelday将填充'001'。
EDIT2:
如果您想从字符串中获取它,请执行此操作,假设zelda
具有相同大小的str
:
string str ("111000");
int i;
for (i=0; i < str.length(); i++)
{
zelda[i] = (str[i] - '0');
}
这是有效的原因:
char列表中表示的数字是顺序的(在本例中为ASCII),即数字零表示为48,数字1表示为49,依此类推。因此,当您减去'0'的表示时,您将得到实际数字。