从二进制字符串转换为十进制?

时间:2011-08-17 07:58:51

标签: c

在下面的代码中,我将二进制转换为十进制,然后打印与之对应的字符。

void convertToChar(int binaryChar[],int length)
{
int multiplier = 0;
int i;
int sum = 0;
for(i=length;i>=0;i++)
{
    sum = sum + (binaryChar[i]*pow(2,multiplier));
    multiplier = multiplier + 1;
}
printf("\nThe character is: %c",sum);
}

问题在于sum = sum + (binaryChar[i]*pow(2,multiplier));行。它会从warning: converting to引发错误:double' int'。请帮忙!

4 个答案:

答案 0 :(得分:3)

为什么使用pow来计算2的幂?这太慢了。使用1 << p获得2的p次幂。例如,1 << 0将给出1,1 << 1将给出2,1 << 2将给出4.这是由于位移操作的性质:向左移位一位相当于乘以2.

此外,您的程序看起来有无穷无尽的循环:

for(i=length;i>=0;i++)

如果length是&gt; = 0,则循环永远不会终止。

这应该解决它:

for(i = length - 1; i>=0; i--) sum += (binaryChar[i]*(1 << multiplier++));

答案 1 :(得分:1)

pow的签名是:

double pow(double X, double Y);

用于计算2 ^乘数使用:

1 << multiplier;

快速提及:

  • 你有一个无限循环
  • 如果从另一个方向解析字符串,可以将总和乘以2,这样就不需要multiplier变量。
  • 在那么多问题之后,我甚至不确定int binaryChar[]是对的。名称中的字符表示不同的类型(和代码)..

答案 2 :(得分:0)

pow需要双打并返回一个双精度数。一个丑陋的修复就是使用强制转换

(int)pow(x, y)

但是在这个简单的程序中,为什么不自己做功率扩展而不是调用pow?

答案 3 :(得分:0)

问题是数据类型int的精度较小,因为double的精度(函数pow返回double)因此binaryChar [i]的值将被implizit转换为double,依此类推。 ..有问题的行隐式看起来像这样:

sum = (double) sum + ((double) binaryChar[i] * pow((double)2, (double) multiplier))

为了摆脱警告,你必须做一个明确的转换( 见Type Conversion),例如:

sum = sum + (binaryChar[i] * ((int) pow(2, multiplier));