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。
答案 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
如果您正在尝试做其他事情,请澄清问题。
您可能还需要留意那些评论您问题的人的建议。