将二进制数组转换为十进制数

时间:2018-03-28 04:05:16

标签: c

我正在尝试将二进制字符数组转换为Decimal。我的代码看起来像这样:

int main(int argc, char** argv) {
   int STRING_SIZE = 32;
   int stringLength = 0; 
   char input[STRING_SIZE];
   int arrayCounter = 0; 
   int base = 0;
   char decimalValue[stringLength];
   int exponent = 0;
   int remainder[stringLength];

printf("\nPlease enter a Binary, Decimal or Hexadecimal value no longer than 32 characters. ");
scanf("%s", input);
fgetc(stdin);

//Count the length of the string.
while (input[stringLength] != 0) { 
    printf("%c", input[stringLength]);
    stringLength++;
 }

for (arrayCounter = 0; arrayCounter != stringLength; arrayCounter++) {
    remainder[arrayCounter] = input[arrayCounter] - '0' / 10;
    decimalValue[arrayCounter] = decimalValue[arrayCounter] + remainder[arrayCounter] * base;
    input[arrayCounter] = input[arrayCounter] / 10;
    base = base * 2;
    printf("%c", decimalValue[arrayCounter]);
 }

printf("%s", decimalValue);



return (EXIT_SUCCESS);
}

我知道如何在二进制和十进制之间进行转换,但是当输入是一个字符数组时,我对如何将二进制转换为十进制非常困惑。

1 个答案:

答案 0 :(得分:3)

有类似的问题(二进制到十进制和十六进制(一点一点) )我已经回复使用下面的公式将二进制字符转换为十进制字符

2 ^ 7 *(1 OR 0)+ 2 ^ 6 *(1 OR 0)+ 2 ^ 5 *(1 OR 0)+ 2 ^ 4 *(1 OR 0)+ 2 ^ 3 *(1 OR 0)+ 2 ^ 2 *(1 OR 0)+ 2 ^ 1 *(1 OR 0)+ 2 ^ 0 *(1 OR 0)

下面是您可以参考的示例代码,您可以在输入中使用bstr而不是在声明时初始化

#include<math.h>
#include<stdio.h>
#include<string.h>
int main()
{
char bstr[]="10011";
int i=0;
int len  = strlen(bstr);
int sum = 0;
int j = 0;

for(i=(len-1);i>=0;i--)
{
    sum = sum + (pow(2,i) * (bstr[j] - '0'));
    j++;
}
printf("decimal = %d\n",sum);
return 0;
}