我正在尝试将二进制字符数组转换为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);
}
我知道如何在二进制和十进制之间进行转换,但是当输入是一个字符数组时,我对如何将二进制转换为十进制非常困惑。
答案 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;
}