C ++中的二进制到十进制

时间:2015-11-29 00:51:20

标签: c++ binary

if(input.is_open() && output.is_open())
{
    while(!input.eof())
    {
        char a=NULL;
        getline(input,line);
        while(!line.empty())
        {
        int num=0;
        string byte=line.substr(0,8);
        for(int i=0;i<byte.length();i++)
        {
            if(byte.at(i)==1)
            {
                num=num+pow(2,8-i);
            }
            else
            {
                num+=0;
            }
        }
        output << num << " ";
        line=line.substr(8);
        }

    }
}

我想从文件中读取哪一行是32位二进制数从它获取8位并转换小数。但是上面的代码总是给出0。

2 个答案:

答案 0 :(得分:0)

可以修复一些问题,但主要问题是

if(byte.at(i)==1)

i'1'(ASCII代码49)或'0'(ASCII代码48)中的字符与数字1进行比较。因此,如果byte[i]'1',然后将49与1进行比较并返回false。

解决方案:

将角色与角色进行比较

if (byte.at(i) == '1')

答案 1 :(得分:0)

除了第一个答案中所说的内容之外,还需要

num=num+pow(2,7-i);  // note 7 instead of 8.

这假设您的输入行看起来像

10101010101010101010101010101010

你希望输出像

170 170 170 170

如果您正在尝试做其他事情,请澄清问题。

您可能还需要留意那些评论您问题的人的建议。