2

我必须将给定的二进制输入(例如 1101)转换为十进制,但输入不是字符串数组或整数(传递的参数是const char *binstr)。我应该如何访问二进制数的每个单独的数字,以便我可以对每个数字执行 pow(x,y) 并将它们加在一起以获得十进制数?

4

4 回答 4

0

您可以尝试使用从二进制转换为十进制的程序

char *binstr = "1011011";
int   num = 0, sum = 0, ctr = 0;

ctr = strlen(binstr) - 1;
do{
    sum += ((binstr[ctr] & 0x1) << num);
    ctr--;
    num ++;
}while(ctr >= 0);
于 2013-02-21T00:33:10.030 回答
0

您已经制作了一个c string,并且可以通过类似于数组的方式获取每个字符:

input[i]

这是将二进制字符串拆分为单个位(字符)并打印出来的示例: http: //cfiddle.net/wYtKJv

您可以使用循环:

while(i<100){

if(binstr[i]== '\0'){
   break;
}

printf("First Bit:\n%c\n\n",binstr[i]);
i++;
}

由于 C 字符串是空终止的,因此您可以检查如果我们命中的字符是否'\0'进入break循环。

在循环中,您还可以将它们转换charsints并将它们存储在某个地方(可能是数组),您可以在其中访问它们进行计算。

于 2013-02-21T00:27:28.457 回答
0
binstr[0];
binstr[1];
binstr[2];

ETC

或者你可以通过指针来完成

char* s = binstr;
unsigned long x =0;
while(*s) { x = x << 1; x |= (*s == '1' ? 1:0); s++;} 
printf("the decimal of %s is %ul", binstr, x);
于 2013-02-21T00:20:47.580 回答
0

const char *通常指的是 C 字符串。您可以使用strtol(3)

int x = strtol(binstr, NULL, 2);
于 2013-02-21T00:22:35.103 回答